json - Golang JSON 到包含 slice 的 map 本身的 map slice (无类型)

标签 json go hashmap slice

我有一个具有以下格式的 config.json:

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

如果可能的话,我想将其转换为 map slice ,其中每个 map 本身是一个“键”,“值”是一个 slice 。

我可以手动完成此操作,例如:

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 输入和“手动”示例都使用 slice 映射,而不是映射 slice 。将您的目标类型更改为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 .

关于json - Golang JSON 到包含 slice 的 map 本身的 map slice (无类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45719297/

相关文章:

image-processing - 去调整图像大小

javascript - 哈希键/值作为数组

php - 我得到的 API 响应是什么类型的结果?

ios - NSJSONSerialization 与基于流的解析器

go - 为什么反射要与 UNEXPORTED Struct 和 Unexported Fields 一起使用?

java - 如何将多个参数映射为 HashMap 中的键?

Java HashMap get() 方法不返回元素

php - 尝试将 JSON 数据传递给 Highcharts 但没有成功

python - API View 中的 Django Rest 框架更新方法以更改 db json 中的值

go - 迭代边界与数据类型相同