使用Go语言解析JSON数据,生成Map数据结构
来源:stackoverflow
时间:2024-02-24 17:27:42 349浏览 收藏
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《使用Go语言解析JSON数据,生成Map数据结构》,聊聊,我们一起来看看吧!
问题内容
大家好,我有一个 json 结构如下:
json structure: { "items": [ {"pkg": "0", "pin": "0", "item": "0"}, {"pkg": "1", "pin": "1", "item": "1"}, {"pkg": "0", "pin": "2", "item": "2"}, {"pkg": "1", "pin": "3", "item": "3"}, {"pkg": "0", "pin": "4", "item": "4"}, {"pkg": "1", "pin": "5", "item": "5"}, {"pkg": "0", "pin": "6", "item": "6"}, {"pkg": "1", "pin": "7", "item": "7"}, {"pkg": "0", "pin": "8", "item": "8"}, {"pkg": "1", "pin": "9", "item": "9"}, {"pkg": "0", "pin": "10", "item": "10"}, {"pkg": "1", "pin": "11", "item": "11"}, {"pkg": "0", "pin": "12", "item": "12"}, {"pkg": "1", "pin": "13", "item": "13"}, {"pkg": "0", "pin": "14", "item": "14"}, {"pkg": "1", "pin": "15", "item": "15"}, {"pkg": "0", "pin": "16", "item": "16"}, {"pkg": "1", "pin": "17", "item": "17"}, {"pkg": "0", "pin": "18", "item": "18"}, {"pkg": "1", "pin": "19", "item": "19"}, {"pkg": "0", "pin": "20", "item": "20"}, {"pkg": "1", "pin": "21", "item": "21"}, {"pkg": "0", "pin": "22", "item": "22"}, {"pkg": "1", "pin": "23", "item": "23"}, {"pkg": "0", "pin": "24", "item": "24"}, {"pkg": "1", "pin": "25", "item": "25"}, {"pkg": "0", "pin": "26", "item": "26"}, {"pkg": "1", "pin": "27", "item": "27"}, {"pkg": "0", "pin": "28", "item": "28"}, {"pkg": "1", "pin": "29", "item": "29"}, {"pkg": "0", "pin": "30", "item": "30"}, {"pkg": "1", "pin": "31", "item": "31"}, {"pkg": "0", "pin": "0", "item": "32"}, {"pkg": "1", "pin": "1", "item": "33"}, {"pkg": "0", "pin": "2", "item": "34"}, {"pkg": "1", "pin": "3", "item": "35"}, {"pkg": "0", "pin": "4", "item": "36"}, {"pkg": "1", "pin": "5", "item": "37"}, {"pkg": "0", "pin": "6", "item": "38"}, {"pkg": "1", "pin": "7", "item": "39"}, {"pkg": "0", "pin": "8", "item": "40"}, {"pkg": "1", "pin": "9", "item": "41"} ] }
我使用下面的结构来存储 json 中的值
package basics import ( "encoding/json" "fmt" "io/ioutil" "os" "strconv" ) type nnodes struct { items []nodeitem `json:"items"` } type nodeitem struct { pkg string `json:"pkg"` pin string `json:"pin"` item string `json:"item"` } func parser() { data, _ := ioutil.readfile("list.json") var result nnodes var pkg, pin, item int json.unmarshal(data, &result) foobar := make(map[int]map[int][]int) siblings := make(map[int][]int) for _, value := range result.items { if pkg, err = strconv.atoi(value.pkg); err != nil { break } if pin, err = strconv.atoi(value.pin); err != nil { break } if item, err = strconv.atoi(value.item); err != nil { break } siblings[pin] = append(siblings[pin], item) foobar[pkg] = siblings } fmt.println(foobar) } what i am getting is below output: map[0:map[0:[0 32] 1:[1 33] 2:[2 34] 3:[3 35] 4:[4 36] 5:[5 37] 6:[6 38] 7:[7 39] 8:[8 40] 9:[9 41] 10:[10 42] 11:[11 43] 12:[12 44] 13:[13 45] 14:[14 46] .. so on
我正在寻找的是具有独特pkg的地图,如下所示:
// foobar map 的预期映射输出.. 基本上有 2 个相似的 pin 条目,并且它们对应的项目应该添加到同一个切片中。
map[0:map[0:[0,32] 2:[2,34] 4[4:36] 6[6:38]... map[1:map[1:[1,33] 3:[3,35] 5[5:37] 7[7:39]...
关于我哪里出错的任何提示。
正确答案
能够使用以下代码解决该问题:
package basics import ( "encoding/json" "fmt" "io/ioutil" "os" "strconv" ) type NNodes struct { Items []NodeItem `json:"items"` } type NodeItem struct { Pkg string `json:"pkg"` Pin string `json:"pin"` Item string `json:"item"` } func parser() { data, _ := ioutil.ReadFile("list.json") var result NNodes var pkg, pin, item int json.Unmarshal(data, &result) foobar := make(map[int]map[int][]int) for _, value := range result.items { if pkg, err = strconv.Atoi(value.Pkg); err != nil { break } if pin, err = strconv.Atoi(value.Pin); err != nil { break } if item, err = strconv.Atoi(value.Item); err != nil { break } if foobar[pkg] == nil { f[pkg] = make(map[int][]int) f[pkg][pin] = append(f[pkg][pin], item) else { f[pkg][pin] = append(f[pkg][pin], item) } } fmt.Println(foobar) }
好了,本文到此结束,带大家了解了《使用Go语言解析JSON数据,生成Map数据结构》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!
声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习