php小编草莓将json映射为具有嵌套字典的结构是一种常见的数据处理方法。通过将json数据转换为嵌套字典,我们可以更方便地对数据进行操作和访问。嵌套字典的结构可以提供更灵活的数据组织方式,使我们能够更高效地处理复杂的数据结构。在实际应用中,将json映射为嵌套字典可以帮助我们更好地理解和处理数据,提高代码可读性和维护性。无论是处理API返回的json数据,还是解析配置文件,将json映射为嵌套字典都是一种常见的数据处理技巧。
问题内容
我是 golang 新手。我有一个带有嵌套结构的 json 文件,我想解析和填充它。
我正在尝试使用地图结构来尝试填充。我能够对简单的结构做到这一点。但是当涉及到字典数组(key:struct)时。 map[string]接口{}
似乎因 runtime 错误而失败:索引超出范围
。
我尝试对下面的 json 示例执行以下操作。
type window struct { loc []int wrtc string label string } type view struct { windows []window } type views struct { views []view } type desktop struct { views []views `mapstructure:views` rotation_speed string `mapstructure:"rotationspeed" json:rotationspeed"` } func main() { file, _ := ioutil.readfile("test.json") data := desktop{} _ = json.unmarshal([]byte(file), &data) fmt.println("data: ", data.views[0]) }
{ "desktop": { "view": [{// configs for view1 "random_id1": { "loc": [0,0,640,360], "wrtc": "some string", "label": "window 1" }, "random_id213443": { "loc": [640,360,1280,720], "wrtc": "some string blah", "label": "window 2" }, // more windows with random ids.... }, { // configs for view2... } ], "rotationSpeed": 30 }
由于窗口 id 是随机的,我无法在结构中定义它。
我尝试使用 mapstruct:",squash"
但这似乎也失败了。
非常感谢您提供的任何帮助。
解决方法
@burak serdar 是对的
您不需要地图结构。 json 解组可以解决这个问题。
你的代码有很多错误,比如结构、大写、“视图”等。
以下是演示:
package main import ( "encoding/json" "fmt" ) var data = ` { "desktop":{ "view":[ { "random_id1_1":{ "loc":[ 0, 0, 640, 360 ], "wrtc":"some string", "label":"window 1" }, "random_id1_2":{ "loc":[ 640, 360, 1280, 720 ], "wrtc":"some string blah", "label":"window 2" } }, { "random_id2_1":{ "loc":[ 0, 0, 640, 360 ], "wrtc":"some string", "label":"window 1" }, "random_id2_2":{ "loc":[ 640, 360, 1280, 720 ], "wrtc":"some string blah", "label":"window 2" } } ], "rotationspeed":30 } } ` type window struct { loc []int wrtc string label string } type desktop struct { view []map[string]window rotation_speed int `json:"rotationspeed" mapstructure:"rotationspeed"` } type config struct { desktop desktop } func main() { c := config{} json.unmarshal([]byte(data), &c) fmt.println("json.unmarshal: ", c) }
json.unmarshal: {{[map[random_id1_1:{[0 0 640 360] some string window 1} random_id1_2:{[640 360 1280 720] some s tring blah window 2}] map[random_id2_1:{[0 0 640 360] some string window 1} random_id2_2:{[640 360 1280 720] some string blah window 2}]] 30}}
如果你想要 view
结构,你也可以通过“remain”使用mapstruct
type Window struct { Loc []int Wrtc string Label string } type View struct { Windows map[string]Window `mapstructure:",remain"` } type Desktop struct { View []View Rotation_speed int `json:"rotationSpeed" mapstructure:"rotationSpeed"` } type Config struct { Desktop Desktop } func main() { c2 := Config{} m := map[string]interface{}{} _ = json.Unmarshal([]byte(data), &m) mapstructure.Decode(m, &c2) fmt.Println("mapstructure: ", c2) }
以上是将 json 映射为具有嵌套字典的结构的详细内容。更多信息请关注PHP中文网其他相关文章!

Go语言的核心特性包括垃圾回收、静态链接和并发支持。1.Go语言的并发模型通过goroutine和channel实现高效并发编程。2.接口和多态性通过实现接口方法,使得不同类型可以统一处理。3.基本用法展示了函数定义和调用的高效性。4.高级用法中,切片提供了动态调整大小的强大功能。5.常见错误如竞态条件可以通过gotest-race检测并解决。6.性能优化通过sync.Pool重用对象,减少垃圾回收压力。

Go语言在构建高效且可扩展的系统中表现出色,其优势包括:1.高性能:编译成机器码,运行速度快;2.并发编程:通过goroutines和channels简化多任务处理;3.简洁性:语法简洁,降低学习和维护成本;4.跨平台:支持跨平台编译,方便部署。

关于SQL查询结果排序的疑惑学习SQL的过程中,常常会遇到一些令人困惑的问题。最近,笔者在阅读《MICK-SQL基础�...

golang ...

Go语言中如何对比并处理三个结构体在Go语言编程中,有时需要对比两个结构体的差异,并将这些差异应用到第�...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver CS6
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具