例1

type Transport struct {
Time string
Id int
}
func main() {
//将struct的切片包装成json格式
var st []Transport
t1 := Transport{Time: "22", Id: 44}
st = append(st, t1)
t2 := Transport{Time: "66", Id: 88}
st = append(st, t2)
st_json, _ := json.Marshal(st)
fmt.Println(string(st_json)) //将json格式解析为struct的切片格式
var st2 []Transport
err := json.Unmarshal(st_json, &st2)
fmt.Println(st2)
fmt.Println(st2[0].Time)
fmt.Println(st2[0].Id)
}

例2

json数据:

{
"friends": [
{
"id": 0,
"name": "Robinson Woods"
}
],
"parent": [
{
"id": 1,
"name": "Alejandra Mcdaniel"
}
]
}

代码:

package main

import (
"encoding/json"
"log"
) func main() {
data := `{
"friends": [
{
"id": 0,
"name": "Robinson Woods"
}
],
"parent": [
{
"id": 1,
"name": "Alejandra Mcdaniel"
}
]
}`
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
dataMap := make(map[string][]User)
json.Unmarshal([]byte(data), &dataMap)
for k, v := range dataMap {
log.Printf(`%v,%v`, k, v)
}
}

例3

json数据:

{
"ret":200,
"data":{
"32f49e76d7d16b76f0d49f15710b447236acfc90":{
"torrent":[
{
"sid":2,
"torrent_id":55171,
"info_hash":"32f49e76d7d16b76f0d49f15710b447236acfc90"
}
]
},
"cf7d88fd656d10fe5130d13567aec27068b96676":{
"torrent":[
{
"sid":10,
"torrent_id":36,
"info_hash":"8bf47a8baa8bf7927ec61a850959bca8405482f5"
},
{
"sid":1,
"torrent_id":7233,
"info_hash":"07bb8defd21288a30a54ad793fe615f81afdbb2b"
},
{
"sid":8,
"torrent_id":5821,
"info_hash":"a69b89a8df716982ecceff4b98c532fc538501ae"
}
]
}
},
"msg":"",
"version":"1.5.0"
}

代码:

package main

import (
"encoding/json"
"fmt"
) type ApiSitesInfoHash struct {
Ret int `json:"ret"`
Data Data `json:"data"`
Msg string `json:"msg"`
Version string `json:"version"`
}
type Data map[string]Torrents //自定义类型
type Torrents struct{ //结构体
Torrent []Torrent `json:"torrent"`
}
type Torrent struct{
Sid int `json:"sid"`
Torrent_id int `json:"torrent_id"`
Info_hash string `json:"info_hash"`
} func main(){
r:=`{
"ret":200,
"data":{
"32f49e76d7d16b76f0d49f15710b447236acfc90":{
"torrent":[
{
"sid":2,
"torrent_id":55171,
"info_hash":"32f49e76d7d16b76f0d49f15710b447236acfc90"
}
]
},
"cf7d88fd656d10fe5130d13567aec27068b96676":{
"torrent":[
{
"sid":10,
"torrent_id":36,
"info_hash":"8bf47a8baa8bf7927ec61a850959bca8405482f5"
},
{
"sid":1,
"torrent_id":7233,
"info_hash":"07bb8defd21288a30a54ad793fe615f81afdbb2b"
},
{
"sid":8,
"torrent_id":5821,
"info_hash":"a69b89a8df716982ecceff4b98c532fc538501ae"
}
]
}
},
"msg":"",
"version":"1.5.0"
}` var dataMap ApiSitesInfoHash json.Unmarshal([]byte(r), &dataMap)
for k, v := range dataMap.Data {
fmt.Println(k)
//fmt.Printf("%v",v.Torrent)
for _,v1:=range v.Torrent{
fmt.Println(v1.Sid,v1.Torrent_id,v1.Info_hash)
//fmt.Printf("%v",v1.Sid)
} }
}

例4:

json数据:

"Fruit" : {
"1": {
"Name": "Apple",
"PriceTag": "$1"
},
"2": {
"Name": "Pear",
"PriceTag": "$1.5"
}
}

代码:

package main

import (
"fmt"
"encoding/json"
"time" ) func main() {
type Fruit struct {
Name string `json:"name"`
PriceTag string `json:"priceTag"`
} type FruitBasket struct {
Name string `json:"name"`
Fruit map[string]Fruit `json:"fruit"`
Id int64 `json:"id"`
Created time.Time `json:"created"`
}
jsonData := []byte(`
{
"Name": "Standard",
"Fruit" : {
"1": {
"name": "Apple",
"priceTag": "$1"
},
"2": {
"name": "Pear",
"priceTag": "$1.5"
}
},
"id": 999,
"created": "2018-04-09T23:00:00Z"
}`) var basket FruitBasket
err := json.Unmarshal(jsonData, &basket)
if err != nil {
fmt.Println(err)
}
for _, item := range basket.Fruit {
fmt.Println(item.Name, item.PriceTag)
}
}

参考:https://blog.csdn.net/gaoluhua/article/details/104444163

【golang】json数据中复杂key的处理的更多相关文章

  1. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  2. 获取Json字符串中的key和value

    获取Json字符串中的key和value 在web项目中经常会用到json数据(如:struts2处理请求返回json数据给jsp解析),因此,JSONObject对象是必备的,这时就需要引入相关的j ...

  3. 根据数据中的key获取value值

    一.测试数据准备 List<Map<String, String>> result = new ArrayList();Map<String, String> ma ...

  4. 处理Json数据中的日期类型.如/Date(1415169703000)/格式

    在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...

  5. jquery获取json对象中的key小技巧

    jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...

  6. C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法

    这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { ", "ITE ...

  7. 从JSON数据中取出相关数据

    参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html JSON数据如下: { "total": 1, "rows& ...

  8. mysql json_extract函数获取json字段中某个key的值

    参考:https://www.cnblogs.com/chuanzhang053/p/9139624.html json_extract函数可以获取json对象中指定key的值,用法:json_ext ...

  9. Java之Hashmap中value为null,则返回json数据中key不存在

    前两天干活儿的时候,将实例对象放在Hashmap中返回给前端: ArtificialEntity artificialEntity = artificialService.getInfoById(id ...

  10. JsonPath如何获取JSON数据中的值

    场景: 发送接口请求后,得到请求结果值是Json数据, 需要从Json数据信息中提取字段值. 响应值字符与字符之间有空格,导致用正则表达式方法提取比较麻烦,于是用java的JsonPath方法提取快速 ...

随机推荐

  1. dotnet 提升 ToUpper 性能

    在应用软件启动过程中,客户端应用软件是对性能敏感的.比如在解析命令行参数的时候,有时候需要进行字符串处理逻辑.一般来说命令行参数都是语言文化无关的,在需要进行全大写或全小写转换过程中,采用 ToUpp ...

  2. dotnet OpenXML 读取 PPT 内嵌 xlsx 格式 Excel 表格的信息

    在 Office 中,可以在 PPT 里面插入表格,插入表格有好多不同的方法,对应 OpenXML 文档存储的更多不同的方式.本文来介绍如何读取 PPT 内嵌 xlsx 格式的表格的方法 读取方法和 ...

  3. Ubuntu VNC 远程桌面及常见问题

    一.Ubuntu 远程桌面开启 在ubuntu 设置中打开远程桌面 **注意:如果没有共享桌面选项也不要谎,只需要安装 vino 即可 sudo apt update sudo apt install ...

  4. NVCC编译选项含义解析

    NVCC编译 nvcc 是cuda程序的编译器. 1. 编译阶段 用于指定编译阶段最基本的编译参数. -c: 同gcc,只预处理.编译和汇编为.o文件,不link -lib:生成一个库文件,windo ...

  5. nmcli device status状态为unmanaged

    遇到报错:(device lo not available because device is strictly unmanaged) nmcli device status 查看设备状态 nmcli ...

  6. Flink Batch Hash Aggregate

    数据类型要求 BatchPhysicalHashAggRule match 条件会判断 isAggBufferFixedLength(agg) 为什么要求 aggCall 的类型是 Fixed Len ...

  7. 为什么wait()、notify()方法需要和synchronized一起使用

    提示:更多优秀博文请移步博主的GitHub仓库:GitHub学习笔记.Gitee学习笔记 Obj.wait()与Obj.notify()必须要与synchronized(Obj)一起使用,也就是wai ...

  8. Vue cli之项目打包

    在项目根目录中执行如下命令: npm run build 注:Vue脚手架打包的项目必须在服务器上运行,不能直接双击运行: 在打包之后项目中出现 dist 目录,dist 目录就是 Vue脚手架项目的 ...

  9. ProcessStartInfo 类

    定义 命名空间: System.Diagnostics 程序集: System.Diagnostics.Process.dll 指定启动进程时使用的一组值. C#复制   public sealed ...

  10. 神经网络常见参数解释:epoch、batch、batch size、step、iteration

      本文介绍在机器学习.深度学习的神经网络模型中,epoch.batch.batch size.step与iteration等名词的具体含义.   epoch:表示将训练数据集中的所有样本都过一遍(且 ...