【问题标题】:Accessing data in nested arrays & objects with Go使用 Go 访问嵌套数组和对象中的数据
【发布时间】:2013-10-09 09:37:05
【问题描述】:

我正在尽最大努力将一些 json 数据解组为 Go 中可用的形式,但似乎无法得到它。数据为:

{
    "series": [
        {
            "series_id": "PET.EMD_EPD2D_PTE_NUS_DPG.W",
            "name": "U.S. No 2 Diesel Retail Prices, Weekly",
            "units": "Dollars per Gallon",
            "updated": "2013-09-27T07:21:57-0400",
            "data": [
                [
                    "20130923",
                    "3.949"
                ],
                [
                    "20130916",
                    "3.974"
                ]
            ]
        }
    ]
}

我正在尝试将data 下的数组放入一个变量中,这样我就可以遍历它们并执行以下操作:

if data[i][0] == "20130923" {
    fuelPrice.Price == data[i][1]
}

我试图将数据解组到一个结构中,但我不知道如何通过series... 即我不知道如何做嵌套数组。像这样的事情不起作用:

type Series struct {
    SeriesId    string
    Name        string
    Data        [][]string
}

type RawFuelPrice struct {
    Series []Series
    Data []interface{}[]
}

另外,如果我解组为 interface{},我无法弄清楚如何访问数据...

我绝对是初学者。感谢您的时间和精力。

【问题讨论】:

标签: json go


【解决方案1】:

您的代码很好——除了 RawFuelPrice 结构的 Data 成员。我认为该语法无效,并且 JSON blob 的顶层没有 Data 属性。

也就是说,这就是您获取数据的方式:

var rfp RawFuelPrice
json.Unmarshal(input, &rfp)
for _,s := range rfp.Series {
    fmt.Println("Name",s.Name)
    for _,d := range s.Data {
        fmt.Println("\tdate:",d[0])
        fmt.Println("\tprice:",d[1])
    }
    fmt.Println()
}

虽然您可能想检查所有数据是否都在那里。

去游乐场链接:http://play.golang.org/p/C47lZJ_L0o

【讨论】:

  • Data []interface{} 是多余的。它与 json 数据中的任何内容都不匹配。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多