+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 将 json 文件编组到地图中 >

将 json 文件编组到地图中

时间:2024-04-10 09:34:09

有志者,事竟成!如果你在学习golang,那么本文《将 JSON 文件编组到地图中》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容
我有一个较大的(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 array
data := make(map[string]Item) // cannot unmarshal array into Go value of type map[string]Item


bytes, _ := ioutil.ReadFile("./templates/data.json")
err := json.Unmarshal(bytes, &data)

fmt.Println(data)

解决方案

我的问题是我不知道如何通过 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}
请注意,如果您最初使用指针切片 []*item,创建地图会更简单:

m := map[string]*Item{}
for _, item := range data {
    m[item.Id] = item
}
输出是一样的。请拨打 Go Playground 试试这个。

到这里,我们也就讲完了《将 json 文件编组到地图中》的内容了。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title