首页  >  文章  >  后端开发  >  在 Go 中解组时如何处理不同的 JSON 值类型?

在 Go 中解组时如何处理不同的 JSON 值类型?

Patricia Arquette
Patricia Arquette原创
2024-11-18 21:07:03707浏览

How to Handle Varying JSON Value Types When Unmarshaling in Go?

在 Go 中解组具有不同值类型的 JSON

在 Go 中,JSON 解组通常涉及将 JSON 数据映射到相应的结构。然而,当数据结构变化时,就会出现困难,将键的值呈现为对象或字符串数​​组。

问题:
API 提供不一致的数据结构,导致键的潜在值变化:内联对象或对对象的引用(/obj1/is/at/this/path)。

解决方案:
要处理这种可变性,请考虑以下技术:

1 。解组到接口类型:
将 JSON 数据解组到包含 []interface{} 类型字段的结构体。这将允许字符串(解码为字符串)和对象(解码为 map[string]interface{})存储在数组中。

代码示例:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

2.用于区分的类型切换:
数据解组后,使用类型切换来区分字符串和对象。

代码示例:

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}

额外注意:

  • 您可以根据需要通过访问底层的map[string]interface{}结构来进一步处理对象。
  • 这种方法为处理未来潜在的变化提供了灵活性数据结构,无需任何硬编码或反射。

以上是在 Go 中解组时如何处理不同的 JSON 值类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn