在 Go 中处理动态 JSON 字段类型
在 Go 中将 JSON 解组到结构体时,可能会遇到值类型不一致的情况API 请求中的特定键。当服务器发送同一密钥的不同对象结构或字符串引用时,就会出现此挑战。这可能会带来问题,因为 Go 需要固定的结构来进行解组。
为了解决这个问题,可以采用使用接口类型的类型动态方法。考虑以下 JSON 数据:
{ "mykey": [ {obj1}, {obj2} ] }
为了捕捉这种动态性质,我们可以定义一个结构体,如下所示:
type Data struct { MyKey []interface{} `json:"mykey"` }
当遇到带有字符串值的 JSON 时,例如:
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
MyKey 切片元素将被解码为字符串。对于对象,它们将被解码为 map[string]interface{} 值。这种区别可以使用类型开关来实现:
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) } }
通过将 JSON 解组为接口类型并使用类型开关,Go 开发人员可以处理动态字段类型并适当地解析数据,无论提供的结构如何由服务器提供。
以上是Go 如何在解组过程中处理动态 JSON 字段类型?的详细内容。更多信息请关注PHP中文网其他相关文章!