【问题标题】:Golang JSON to Slice of Maps of Maps themselves Containing Slices (without Types)Golang JSON to Slice of Maps of Maps itself contains Slices (without Types)
【发布时间】:2018-01-24 22:27:03
【问题描述】:

我有一个config.json,格式如下:

{
    "recordType1": [
        "field1", "field2", "field3", "field4", "field5"
    ],
    "recordType2": [
        "field1", "field2", "field3", "field4", "field5", "field6", "field7"
    ]
}

如果可能的话,我想把它转换成一个 map 切片,其中每个 map 本身就是一个“键”,而“值”是一个切片。

我可以像这样手动完成这个:

package main

import ("fmt")

func main() {
        m := make(map[string][]string, 0)
        m2 := make(map[string][]string, 0)
        sliceOfMaps := make([]map[string][]string, 0)

        m["recordType1"] = []string{"field1", "field2", "field3"}
        m2["recordType2"] = []string{"field1", "field2", "field3", "field4", "field5"}
        sliceOfMaps = append(sliceOfMaps, m, m2)

        fmt.Println(m)
        fmt.Println(m2)
        fmt.Println(sliceOfMaps)
}

相反,我想在 config.json 的内容上调用 json.Unmarshal 以将该 json 解析为相同的结构。

到目前为止我已经尝试过:

package main

import (
    "fmt"
    "encoding/json"
    "io/ioutil"
    "log"
)


    func main() {
        file, err := ioutil.ReadFile("config/config.json")
        if err != nil {
                log.Fatal("Err Reading File:", err)
        }

        var sliceOfMaps []map[string][]string
        sliceOfMaps = make([]map[string][]string, 0)

        err = json.Unmarshal(file, &sliceOfMaps)
        if err != nil {
                log.Fatal("Err Parsing JSON", err)
        }

        fmt.Println(sliceOfMaps)
    }

这会产生错误:

Err Parsing JSONjson: cannot unmarshal object into Go value of type []map[string][]string

非常感谢任何帮助,欢迎澄清问题。谢谢。

【问题讨论】:

    标签: json go hashmap slice


    【解决方案1】:

    您的 JSON 输入和“手动”示例都使用切片地图,而不是地图切片。将您的目标类型更改为map[string][]string,您应该一切顺利:

    package main
    
    import (
        "fmt"
        "encoding/json"
    )
    
    var file = []byte(`{
        "recordType1": [
            "field1", "field2", "field3", "field4", "field5"
        ],
        "recordType2": [
            "field1", "field2", "field3", "field4", "field5", "field6", "field7"
        ]
    }`)
    
    func main() {
        output := map[string][]string{}
        if err := json.Unmarshal(file, &output); err != nil {
            panic(err)
        }
        fmt.Println(output)
    }
    

    产生以下输出:

    map[recordType1:[field1 field2 field3 field4 field5] recordType2:[field1 field2 field3 field4 field5 field6 field7]]
    

    Playground link.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-27
      • 2018-11-19
      • 2022-12-28
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多