json - 如何使用 Go 将具有不同类型的一个元素的数组编码为 JSON?

标签 json go

我需要 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/

相关文章:

go - 停止单个goroutine的最佳方法?

http - 在 golang 中渲染来自 base64 的图像

go - 如何使用 Go 中的 Pact 返回错误请求 (400, 500)?

javascript - 接收二维数组 args 作为 js.Value 并想要一个数组 ([]js.Value)

javascript - 如何对数组进行排序并用 HTML 包装每个数组?

php - 检查 JSON 的响应是否为空

json - 如何将MongoDB 连接到Ani Meteor 主题?

javascript - 我应该使用 JSON 还是 AJAX 作为响应数据?

for-loop - 索引隐式时 `for ... range`的迭代顺序

android - Android中如何调用JSON对象