gpt4 book ai didi

json - 从嵌套的 JSON 字符串中检索元素

转载 作者:行者123 更新时间:2023-12-01 22:44:33 24 4
gpt4 key购买 nike

这是我拥有的 Go 代码:

func main(){

s := string(`{"Id": "ABC123",
"Name": "Hello",
"RelatedItems":[
{"RId":"TEST123","RName":"TEST1","RChildren":"Ch1"},
{"RId":"TEST234","RName":"TEST2","RChildren":"Ch2"}]
}`)

var result map[string]interface{}
json.Unmarshal([]byte(s), &result)
fmt.Println("Id:", result["Id"])
Rlist := result["RelatedItems"].([]map[string]interface{})

for key, pist := range pist {
fmt.Println("Key: ", key)
fmt.Println("RID:", pist["RId"])
}

}

结构在下面
type Model struct {
Id string `json:"Id"`
Name string `json:"ModelName"`
RelatedItems []RelatedItems `json:"RelatedItems"`
}

type RelatedItems struct {
RId string `json:"PCId"`
RName string `json:"PCName"`
RChildren string `json:"string"`
}

我将如何获得可以让我从上面选择特定字段的输出?
例如:

输出

编号:ABC123
关键:0
摆脱:TEST123
键:1
摆脱:TEST234

我看到这个错误

panic: interface conversion: interface {} is nil, not []map[string]interface {}

最佳答案

根据发布的内容,
我很清楚您在从嵌套的 JSON 字符串中检索数据时遇到了问题。

我已经获取了您的代码并尝试编译和重现该问题。
观察后,根据代码的编写方式,我有几点建议。

  • s 中存在数据类型时已知与 Model 类型相似, result可以声明为 type Model .
    这导致 var result Model而不是 map[string]interface{} .
  • 当将从 interface{} 解码的数据时未知,switch 的用法会在不破坏代码的情况下进行救援。
    类似于:
    switch dataType := result["RelatedItems"].(type){
    case interface{}:
    // Handle interface{}
    case []map[string]interface{}:
    // Handle []map[string]interface{}
    default:
    fmt.Println("Unexpected-Datatype", dataType)
    // Handle Accordingly
  • 当我们尝试 Unmarshal 时,我们确保查看 json tags为结构的字段提供的。如果编码的数据没有我们提供的标签,则不会对数据进行相应的解码。
    因此,解码来自 s 的数据的结果进入 result将导致 {ABC123 [{ } { }]}作为字段的标签Name , RId , RName , RChildren给出为 ModelName , PCId , PCName , string分别。

  • 通过上述建议并改进给定的标签,这段代码将如下所示,它肯定会从嵌套的 JSON 结构中检索数据。
    s := string(`{"Id": "ABC123",
    "Name": "Hello",
    "RelatedItems":[
    {"RId":"TEST123","RName":"TEST1","RChildren":"Ch1"},
    {"RId":"TEST234","RName":"TEST2","RChildren":"Ch2"}]
    }`)

    var result Model
    json.Unmarshal([]byte(s), &result)
    fmt.Println(result)

    type Model struct {
    Id string `json:"Id"`
    Name string `json:"Name"`
    RelatedItems []RelatedItems `json:"RelatedItems"`
    }

    type RelatedItems struct {
    RId string `json:"RId"`
    RName string `json:"RName"`
    RChildren string `json:"RChildren"`
    }

    这导致输出: {ABC123 Hello [{TEST123 TEST1 Ch1} {TEST234 TEST2 Ch2}]}

    关于json - 从嵌套的 JSON 字符串中检索元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60384869/

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