如何将json文件读入Map

时间:2018-12-14 14:48:38

标签: json go

我有一个像这样的json文件-data.json

{
    "data1" : {
        "tag" : "some_tag1",
        "info" : "some_info1",
    },
     "data2" : {
        "tag" : "some_tag2",
        "info" : "some_info2",
    }
}

我有一个类似下面的结构

type someStruct struct {
    tag    string `json:"tag"`
    info   string `json:"info"`

}

我正在尝试将json文件读入下面的地图

errorJSON    map[string]someStruct

下面是我的代码

jsonParser := json.NewDecoder(data.json)
err := jsonParser.Decode(&errorJSON)

但是我遇到了错误

json.UnmarshalTypeError

我在做什么错

3 个答案:

答案 0 :(得分:2)

数据有问题。这是无效的JSON,因为它带有结尾的逗号。

尝试一下:

{
    "data1" : {
        "tag" : "some_tag1",
        "info" : "some_info1"
    },
     "data2" : {
        "tag" : "some_tag2",
        "info" : "some_info2"
    }
}

答案 1 :(得分:1)

您必须将大写的someStruct字段和json必须为有效格式。

type someStruct struct {
    Tag  string `json:"tag"`
    Info string `json:"info"`
}

答案 2 :(得分:0)

您的示例json带有多余的逗号-已删除

数据结构是一对带键的someStruct,因此必须是一个地图

大写json结构字段

这是一个基于您的代码的有效示例

package main

import (
    "encoding/json"
    "fmt"
)

type someStruct struct {
    Tag  string `json:"tag"`
    Info string `json:"info"`
}

func main() {
    buf := `{
    "data1" : {
        "tag" : "some_tag1",
        "info" : "some_info1"
    },
     "data2" : {
        "tag" : "some_tag2",
        "info" : "some_info2"
    }
}`

    dat := make(map[string]someStruct)

    if err := json.Unmarshal([]byte(buf), &dat); err != nil {
        panic(err)
    }
    fmt.Println("Hello, playground", dat)
}

游乐场https://play.golang.org/p/ZGuCcGI3vA6