解码 JSON 中混合类型的数组
处理包含不同类型值的 JSON 数组时,必须考虑如何解组将它们有效地转化为 Go 程序。 Go 数组需要显式定义的类型,这在处理不同的值类型时带来了挑战。
解决方案:利用接口{}
解决方案在于使用接口{} ,Go 中的一种特殊类型,可以保存任何类型的值。通过使用 interface{} 数组,我们可以灵活地在同一数组中存储不同类型的值。
示例实现
考虑以下 JSON 示例:
{"key": ["NewYork", 123]}
要使用接口{}解组此 JSON,我们可以定义自定义数据结构:
type UntypedJson map[string][]interface{}
此类型表示从字符串到接口{}数组的映射,允许存储任何类型的值。
解组 JSON
要解组 JSON,我们可以使用 json.Unmarshal function:
var ut UntypedJson json.Unmarshal([]byte(jsonString), &ut)
ut 变量现在将包含作为 UntypedJson 类型的未编组数据。映射键对应于 JSON 对象键,数组值保存不同类型的值。
示例 Playground
嵌入 Go 游乐场的完整示例可以可以在这里找到:
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) }
以上是如何在 Go 中解码具有混合数据类型的 JSON 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!