gpt4 book ai didi

arrays - 解码 map 和 array json

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:53 26 4
gpt4 key购买 nike

如果没有项目,外部 API 返回空数组:

{"items":[]}

...或带有项目的 map :

{"items":{"1": {...}, "2": {...}}}

如何解码它们?我尝试使用这个结构:

var response struct {
Items map[string]Item
Array []Item `json:"items"`
}

但它不起作用。

更新:如果两者(数组和对象)都能生成一个map[string]Item(空的和填充的)

最佳答案

如果您需要解码为变量类型,最简单的方法是解码为 map[string]interface{} 并类型断言(或在本例中为类型转换)您的出路。

func Unmarshal(data []byte) (map[string]Item, error) {
var d struct {
Items interface{} `json:"items"`
}
if err := json.Unmarshal(data, &d); err != nil {
return nil, err
}
switch dv := d.Items.(type) {
case []interface{}:
if len(dv) == 0 {
return nil, nil
}
case map[string]interface{}:
m := make(map[string]Item)
for k, v := range dv {
m[k] = Item(v)
}
return m, nil
}
// fallthrough return if different type, or non-empty array
// Could have put this in a default case, but this catches non-empty arrays too
return nil, fmt.Errorf("unexpected type in json")
}

这是一个示例,显示它适用于您提供的两个示例:https://play.golang.org/p/c0oZX2-xpN

关于arrays - 解码 map 和 array json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39097183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com