文档章节

go操作json,注意json的嵌套、数组

max佩恩
 max佩恩
发布于 2014/05/08 15:53
字数 321
阅读 813
收藏 4

package main

import ( "encoding/json" "fmt" "os" )

type ConfigStruct struct { Host string json:"host" Port int json:"port" AnalyticsFile string json:"analytics_file" StaticFileVersion int json:"static_file_version" StaticDir string json:"static_dir" TemplatesDir string json:"templates_dir" SerTcpSocketHost string json:"serTcpSocketHost" SerTcpSocketPort int json:"serTcpSocketPort" Fruits []string json:"fruits" }

type Other struct { SerTcpSocketHost string json:"serTcpSocketHost" SerTcpSocketPort int json:"serTcpSocketPort" Fruits []string json:"fruits" }

type Object []interface{}

func main() { jsonStr := {"host": "http://localhost:9090","port": 9090,"analytics_file": "","static_file_version": 1,"static_dir": "E:/Project/goTest/src/","templates_dir": "E:/Project/goTest/src/templates/","serTcpSocketHost": ":12340","serTcpSocketPort": 12340,"fruits": ["apple", "peach"]} jsonStr = {"accessToken":"507b5e08ee444dck887b66bd08672905", "clientToken":"64e3a5415bfe405d9485f1jf2ea5c68e", "selectedProfile":{"id":"selID","name":"Bluek404"}, "availableProfiles":[{"id":"测试ava","name":"Bluek404"}]} //json str 转map var dat map[string]interface{} if err := json.Unmarshal([]byte(jsonStr), &dat); err == nil { fmt.Println("==============json str 转map=======================") fmt.Println(dat)

	mapTmp := dat["selectedProfile"].(map[string]interface {})
	fmt.Println(mapTmp["id"])
	/*
	var dat2 map[string]interface{}
	if err := json.Unmarshal([]byte(jsonStr), &dat2); err == nil {
		fmt.Println( dat2["firstName"])
	}
	*/

	mapTmp2 := (dat["availableProfiles"].([]interface {}))[0].(map[string]interface {})
	//mapTmp3 := mapTmp2[0].(map[string]interface {})
	fmt.Println(mapTmp2["id"])
}

//json str 转struct
var config ConfigStruct
if err := json.Unmarshal([]byte(jsonStr), &config); err == nil {
	fmt.Println("================json str 转struct==")
	fmt.Println(config)
	fmt.Println(config.Host)
}

//json str 转struct(部份字段)
var part Other
if err := json.Unmarshal([]byte(jsonStr), &part); err == nil {
	fmt.Println("================json str 转struct==")
	fmt.Println(part)
	fmt.Println(part.SerTcpSocketPort)
}

//struct 到json str
if b, err := json.Marshal(config); err == nil {
	fmt.Println("================struct 到json str==")
	fmt.Println(string(b))
}

//map 到json str
fmt.Println("================map 到json str=====================")
enc := json.NewEncoder(os.Stdout)
enc.Encode(dat)

//array 到 json str
arr := []string{"hello", "apple", "python", "golang", "base", "peach", "pear"}
lang, err := json.Marshal(arr)
if err == nil {
	fmt.Println("================array 到 json str==")
	fmt.Println(string(lang))
}

//json 到 []string
var wo []string
if err := json.Unmarshal(lang, &wo); err == nil {
	fmt.Println("================json 到 []string==")
	fmt.Println(wo)
}

}

© 著作权归作者所有

max佩恩
粉丝 6
博文 156
码字总数 59446
作品 0
南宁
私信 提问
JObject,JArray的基本操作

引用:https://www.cnblogs.com/dacongge/p/6957074.html 1、JObject:基本的json对象

快乐地编程
2018/08/22
0
0
Xcode插件:将 JSON 格式化输出为模型的属性--ESJsonFormat-Xcode

ESJsonFormat-Xcode 将 JSON 格式化输出为模型的属性 写在之前的注意 JSON中的key对应的value为Null的话会格式化成NSString类型 格式化之前光标放在你需要添加属性的地方 RootClass需要自己手...

EnjoySR
2015/07/09
7.6K
0
PostgreSQL json 索引实践 - 检索(存在、包含、等值、范围等)加速

标签 PostgreSQL , json , gin , rum 背景 用户在使用JSON类型时,常见的一些JSON搜索包括: 1、存在,JSON中是否存在某个KEY,某些KEY,某些KEY的任意一个 存在某个KEY(TOP LEVEL) 存在所有...

德哥
2018/10/05
0
0
是我狼/RapidDB

RapidDB 轻量级数据库操作组件 支持事务嵌套 PDO支持 JSON支持 类的实例集合支持 轻量级 可以轻易和其他框架整合 多数据库多连接支持 ##使用方式 ###通过composer安装 $ composer require s...

是我狼
2015/12/31
0
0
【pgsql使用记录】json类型字段

产品提了个需求,要给用户的某些操作设置一些默认值,我不想机械添加新增字段,我只是需要一个配置而已,需要的时候读出来,就跟文件配置一样。读写文件毕竟又是个力气活,还存在IO问题。要是...

NILYANG
2014/03/21
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
443
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
4
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
3
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
7
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部