亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 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 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號