如何解组具有不同类型值的json数组
Posted
技术标签:
【中文标题】如何解组具有不同类型值的json数组【英文标题】:How to unmarshal a json array with different type of value in it 【发布时间】:2014-08-15 12:45:44 【问题描述】:例如:
["NewYork",123]
对于json数组被解码为go数组,而go数组需要显式定义一个类型, 不知道怎么处理。
【问题讨论】:
【参考方案1】:首先,json 是无效的,对象必须有键,所以它应该是 "key":["NewYork",123]
或只是 ["NewYork",123]
。
当您处理多种随机类型时,您只需使用interface
。
const j = `"NYC": ["NewYork",123]`
type UntypedJson map[string][]interface
func main()
ut := UntypedJson
fmt.Println(json.Unmarshal([]byte(j), &ut))
fmt.Printf("%#v", ut)
playground
【讨论】:
【参考方案2】:json 包使用 map[string]interface 和 []interface 值来存储任意 JSON 对象和数组... http://blog.golang.org/json-and-go
对象中的每个值都必须有键。所以假设这是你的 json :
"key":["NewYork",123]
那么你的代码应该是这样的:
package main
import (
"encoding/json"
"fmt"
)
type Message map[string]interface
func main()
msg := Message
s := `"key":["Newyork",123]`
err := json.Unmarshal([]byte(s), &msg)
fmt.Println(msg, err)
你可以运行它:http://play.golang.org/p/yihj6BZHBY
【讨论】:
对于特定情况map[string][]interface
更好,因为他总是期待一个数组。
我刚刚关注了这里:blog.golang.org/json-and-go。但是,对于这种情况,您提供的内容也是明智的。
map[string]interface
如果您希望该值是 null 或数组之外的其他值,则非常好。以上是关于如何解组具有不同类型值的json数组的主要内容,如果未能解决你的问题,请参考以下文章
在数组Vue Js中的另一个不同json对象中具有相同值的数组中的所有json对象中添加/合并新项目
如何在 Go 中将 JSON 对象数组转换为具有默认值的结构数组?