如何使用Go将带有不同类型的一个元素的数组编组到JSON中?

时间:2017-10-10 14:57:15

标签: json go

我需要JSON编组的结果:

["a", "b", ["c", "d"], "e"]

在Go中如何正确执行此操作?

2 个答案:

答案 0 :(得分:2)

创建混合类型的切片/数组的技巧是使用提供的空接口类型

inner := []string{"c", "d"}
all := []interface{}{"a", "b", inner, "e"}

然后只是json.Marshal接口切片。这是有效的,因为任何和所有值至少实现一个空接口。您可以使用最臃肿的对象,就好像它没有任何方法/接收器函数可以调用。这就是为什么人们有时会将go interface{}类型称为" generic" 类型。包中的许多抽象东西都使用interface{}个参数,然后反射来计算实际传递的内容。只需查看encoding / json包的源代码,看看它如何解组值......

https://play.golang.org/p/96VVo2F1m7

Unmarshalling的工作方式几乎相同:您可以将JSON字符串解组为interface{}个变量。您可能需要使用类型断言和/或反射来处理数据。这就是为什么最好创建类型的原因......

答案 1 :(得分:0)

您可以使用interface{}切片,例如https://play.golang.org/p/c8dPRPK6mr