【golang】json数据中复杂key的处理
例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的处理的更多相关文章
- 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题
1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...
- 获取Json字符串中的key和value
获取Json字符串中的key和value 在web项目中经常会用到json数据(如:struts2处理请求返回json数据给jsp解析),因此,JSONObject对象是必备的,这时就需要引入相关的j ...
- 根据数据中的key获取value值
一.测试数据准备 List<Map<String, String>> result = new ArrayList();Map<String, String> ma ...
- 处理Json数据中的日期类型.如/Date(1415169703000)/格式
在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...
- jquery获取json对象中的key小技巧
jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...
- C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法
这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { ", "ITE ...
- 从JSON数据中取出相关数据
参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html JSON数据如下: { "total": 1, "rows& ...
- mysql json_extract函数获取json字段中某个key的值
参考:https://www.cnblogs.com/chuanzhang053/p/9139624.html json_extract函数可以获取json对象中指定key的值,用法:json_ext ...
- Java之Hashmap中value为null,则返回json数据中key不存在
前两天干活儿的时候,将实例对象放在Hashmap中返回给前端: ArtificialEntity artificialEntity = artificialService.getInfoById(id ...
- JsonPath如何获取JSON数据中的值
场景: 发送接口请求后,得到请求结果值是Json数据, 需要从Json数据信息中提取字段值. 响应值字符与字符之间有空格,导致用正则表达式方法提取比较麻烦,于是用java的JsonPath方法提取快速 ...
随机推荐
- 3.Exporter概述
一.Exporter概述 所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter.而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方 ...
- xtrabackup备份恢复
tar -xzvf percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz cd percona-xtrabackup-2.1.9-Linux-x86_64/ ...
- Github Copilot绑定Jetbrains IDE无效的解决方案
在Github中进行教育认证后不会自动开通Copilot功能,因此,在进行了Github教育认证之后,在使用之前要进入Github Copilot官网开通Coplilot,如果忽略了这一点,绑定Jet ...
- ansible(14)--ansible的get_url模块
1. get_url模块 功能:通过互联网下载软件至被控端本地: 主要参数如下: 参数 说明 url 资源文件在互联网上的具体url地址 dest 文件下载位置的绝对路径 mode 文件下载位置的绝对 ...
- WEB服务与NGINX(5)- root和alias的区别详解
root和alias的区别 root:指定站点家目录,给定的路径对应于location中的/uri 左侧的/,文件的绝对路径为root+location. 支持环境:http, server, loc ...
- MySQL:根据指定日期加365天,当前时间距离明年的指定的日期还有多少天-SQL
一.数据准备 /* Navicat Premium Data Transfer Source Server : songweipeng Source Server Type : MySQL Sourc ...
- Nginx 常用的基础配置(web前端相关方面)
文章出处:https://juejin.cn/post/7196859948554715195 基础配置 user root; worker_processes 1; events { worker_ ...
- QQ/钉钉远程控制和商业远程控制哪个好用
提到远程协助.远程控制,你会想到什么? 国内最古老.最被用户熟知的,大概就是QQ远程控制了.QQ远程控制,方便易用.打开聊天窗口,点窗口上方"-",再移动到如图所示的电脑-箭头图标 ...
- Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页
10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...
- 导入使用es
from django.shortcuts import render, HttpResponsefrom elasticsearch import Elasticsearchfrom elastic ...