我需要 JSON marshal 的这个结果:
["a", "b", ["c", "d"], "e"]
在 Go 中如何正确执行此操作?
最佳答案
创建混合类型的 slice/数组的技巧是使用 go 提供的空接口(interface)类型
inner := []string{"c", "d"}
all := []interface{}{"a", "b", inner, "e"}
然后只是 json.Marshal
接口(interface) slice 。这是可行的,因为任何和所有值都至少实现了一个空接口(interface)。您可以使用最臃肿的对象,就好像它没有任何方法/接收器函数可以调用一样。这就是为什么人们有时将 go 的interface{}
类型称为“通用” 类型。封装的许多抽象内容都使用 interface{}
参数,然后通过反射来确定实际传递的内容。只需查看 encoding/json 包的源代码,看看它是如何解码值的……
https://play.golang.org/p/96VVo2F1m7
解码的工作方式几乎相同:您可以将 JSON 字符串解码为 interface{}
变量。不过,您可能需要使用类型断言和/或反射才能处理数据。这就是为什么最好创建类型...
关于json - 如何使用 Go 将具有不同类型的一个元素的数组编码为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46669897/