【问题标题】:parsing a multi leve json file in Go Language用 Go 语言解析多级 json 文件
【发布时间】:2014-12-31 06:46:38
【问题描述】:

我需要从 json 文件中的字段解析和获取值。

[{"id": 27}, {"id": 0, "label": "Label 0"}, null, {"id": 93}, {"id": 85}, {"id": 54}, null, {"id": 46, "label": "Label 46"}]}}    

虽然我可以在单个级别上工作,但我不知道如何在这里迭代各个级别。 我曾尝试在 google、各种帮助网站甚至 stackoverflow 中寻找答案。 我找不到任何可以帮助我处理多级 json 字节数组的示例。 希望有人能引导我理解并努力。 提前致谢

【问题讨论】:

  • 请更好地定义您需要什么。一般来说,最好的做法是将你的 json 映射到严格的数据类型,然后就很容易做到了。

标签: parsing go multi-level


【解决方案1】:

只需将 JSON 解析为结构数组即可:

package main

import (
    "encoding/json"
    "fmt"
)

type Item struct {
    Id    int
    Label string
}

func main() {

    data := []byte(`[{"id": 27}, {"id": 0, "label": "Label 0"}, null, {"id": 93}, {"id": 85}, {"id": 54}, null, {"id": 46, "label": "Label 46"}]`)
    var val []*Item

    if err := json.Unmarshal(data, &val); err != nil {
        fmt.Printf("Error: %s\n", val)
        return
    }

    for _, it := range val {
        fmt.Printf("%#v\n", it)
    }

}

我希望这会有所帮助。

【讨论】:

  • 你能解释一下为什么在初始化时需要一个指向 Item 结构的指针:var val []*Item?
  • 我使用指针来反映 JSON 中的“空”条目。这样,marshal 只需将“nil”插入切片而不是 Item{0,""}。
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多