登录
首页 >  Golang >  Go问答

在golang中如何使用数组解析JSON数据

来源:stackoverflow

时间:2024-03-09 13:27:24 253浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《在golang中如何使用数组解析JSON数据》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我想检索所有 id 以及索引值。

{
  "results": [
    {
      "id": "3b72"
    },
    {
      "id": "d953b1"
    },
    {
      "id": "8eac"
    },
    {
      "id": "00b4c"
    },
    {
      "id": "22360"
    }
  ],
  "index": 10
}

我尝试了以下方法,但没有成功(我对 golang 很陌生):

var result map[string]interface{}
json.Unmarshal([]byte(body), &result)

ids:= result["results"].(map[string]interface{})

for key, value := range ids{
    fmt.Println(key, value.(string))
}

解决方案


根据您的 json 字符串,有几件事需要修复。首先,result["results"] 属性需要转换为 []interface{},因为 results 保存数组数据。

ids := result["results"].([]interface{})

然后,在 ids 的每次迭代中,变量 value (其类型为 interface{})需要转换为 map[string]interface{},这样我们就能够访问 id 属性来获取它的值。

for index, value := range ids {
    valuemap := value.(map[string]interface{})
    fmt.println(index, valuemap["id"])
}

工作示例:https://play.golang.org/p/Pxq6u7q-NAK

根据 @andrejs 的回答,如果您的 json 结构是固定的,那么最好在结果上使用定义良好的结构(请参阅 @danopz 的回答)。 It has better performance 并且消耗更少的精力与它的子级交互。

您可能应该为主体定义一个结构并解组到此:

var result struct {
    Results []struct{
        ID string `json:"ID"`
    } `json:"results"`
    Index int `json:"index"`
}

err := json.Unmarshal(body, &result)

if err != nil {
    // do something, result may be empty
    return
}

for i, result := range result.Results {
    fmt.Println(i, result.ID)
}

然后您就可以访问这些值,例如通过调用 result.indexresult.results[0].id

工作示例:https://play.golang.org/p/j1WpEolQlXV

终于介绍完啦!小伙伴们,这篇关于《在golang中如何使用数组解析JSON数据》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>