json - 在 go 中解码 JSON 结构制作空 map

标签 json dictionary go unmarshalling

<分区>

我有一个 json 文件,其中包含大量数据:

{"elec":{
    "s20":{
        "coldS":{
            "wDay": {
                "Night":   {"avg": 1234, "stddev": 56},
                "Morning": {"avg": 5432, "stddev": 10}
                ...
            },
            ...
        },
        ...
    },
    ...
}

我想将这个文件加载为一个 go 结构:

type ConsumConfig struct {
    elec map[string]map[string]map[string]map[string]ConsumConfValue `json:"elec"`
    gas  map[string]map[string]map[string]map[string]ConsumConfValue `json:"gas"`
}

type ConsumConfValue struct {
    avg   int `json:"avg"`
    stdev int `json:"stddev"`
}

当我解码文件数据时,我获得了一个结构类型的零值对象,而不是一个充满数据的对象(获得 elec = map[]gas = map[]).因此,当我访问这些映射的值时,我获得了零值(所以 0 因为有整数)。

没有编译和执行错误。我试图找出文件名是否有问题,或者我的文件是否包含零,但事实并非如此;有文件(作为字节数组成功加载),包含不同于 0 的值。

这是我解码文件的代码:

func GetConsumConfig(climatFilePath string) ConsumConfig {
    fileBytes, err := ioutil.ReadFile(climatFilePath) // get file as byte array
    if err != nil {
        panic(err)
    }

    var configConsum ConsumConfig
    err = json.Unmarshal(fileBytes, &configConsum) // byte array as struct
    if err != nil {
        panic(err)
    }

    return configConsum
}

下面是我所做的测试,以查看返回的对象中是否包含任何内容:

fmt.Println("0...", climatFilePath)
for a, b := range returnedConfigConsum.elec {
    fmt.Println(a, ": ", b)
}
fmt.Println("1...")
for a, b := range returnedConfigConsum.gas {
    fmt.Println(a, ": ", b)
}
fmt.Println("2...")

这就是打印:

0... file/path.json
1...
2...

而不是像

0... file/path.json
s20: map[..]
s50: map[..]
s75: map[..]
1...
s20: map[..]
s50: map[..]
s75: map[..]
2...

最佳答案

这是因为您的 elecgas 字段是小写的。 json.Unmarshal 只会接触以大写字母开头的字段。将它们重命名为 ElecGas 应该可以解决问题。

关于json - 在 go 中解码 JSON 结构制作空 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45734988/

相关文章:

php - 将xml转换为json时出现parsererror

function - 在 Elm 中使用 Dict.update 和嵌套更新函数

c# - 字典通配符搜索

python - 如何在 python 中创建唯一的嵌套字典列表

go - golang 中的无类型 channel

go - 将对象传递给其他包中的结构

go - 带有聚合和分组的 mgo

javascript - Node.js 从 csv/JSON 过滤/提取数据子集

json - 为什么我无法访问发布到我的 codeigniter 应用程序的 json 数据?

javascript - 未捕获的类型错误 : Cannot read property 'props' of null