在Go中解组JSON结构以生成空地图

NatNgs:

我有一个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...
康斯坦丁·潘(Constantin S. Pan):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章