我有一个像这样的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
我在做什么错
答案 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)
}