为了账号安全,请及时绑定邮箱和手机立即绑定

将 json 文件编组到地图中

将 json 文件编组到地图中

Go
千巷猫影 2023-06-26 17:19:04
我有一个较大的(10mb)JSON 文件,我试图将其解组到地图中,以便在需要时可以从内存中读取它。我的问题是,我无法弄清楚如何通过 json 中每行的 id 对地图进行键控,即使这是解决问题的惯用方法。它包含很多嵌套数据,但为了简单起见,它基本上是这样的:[{"id": "086687173", "count": 5}, {"id": "078382574", "count": 3}]type Item struct {    Id string `json:"id"`    Count int `json:"count"`}data := []Item  // am able to marshal into an arraydata := make(map[string]Item) // cannot unmarshal array into Go value of type map[string]Itembytes, _ := ioutil.ReadFile("./templates/data.json")err := json.Unmarshal(bytes, &data)fmt.Println(data)
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我的问题是我不知道如何通过 id 对地图进行键控


您无法为地图建立索引,因为您没有任何地图。


您的输入 JSON 是一个 JSON 数组,因此您可以将其解组到 Go 切片中。之后你必须自己构建一个 Go 地图。然后您可以通过以下方式索引该地图Id:


m := map[string]*Item{}

for i := range data {

    m[data[i].Id] = &data[i]

}


fmt.Println(m)

fmt.Println(m["086687173"])

fmt.Println(m["078382574"])

这将输出(在Go Playground上尝试):


[{086687173 5} {078382574 3}] <nil>

map[078382574:0x43015c 086687173:0x430150]

&{086687173 5}

&{078382574 3}

请注意,如果您最初使用指针 slice []*Item,则创建映射会更简单:


m := map[string]*Item{}

for _, item := range data {

    m[item.Id] = item

}

输出是一样的。在Go Playground上试试这个。



查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信