我有一个如下所示的JSON文件:
{
"jailbreaks": [
{
"jailbroken": false,
"name": "",
"version": "",
"url": "",
"anleitung": [],
"ios": {
"start": "10.2.1"
},
"caveats": "",
"platforms": []
},
{
"jailbroken": true,
"name": "Yalu102",
"version": "beta 6",
"url": "https://domain-dl.tld",
"anleitung": [
{ "blog": "title", "link": "http://domain.tld/" },
{ "blog": "Test", "link": "http://google.at" }
],
"ios": {
"start": "10.2"
},
"caveats": "some text here",
"platforms": [
"Windows",
"OS X",
"Linux"
]
},
我创建了这样的对象:
type Jailbreak struct {
Jailbroken bool `json:"jailbroken"`
Name string `json:"name"`
Version string `json:"version"`
URL string `json:"url"`
Anleitung map[string]struct {
Name string `json:"blog"`
Link string `json:"link"`
} `json:"anleitung"`
Firmwares struct {
Start string `json:"start"`
End string `json:"end"`
} `json:"ios"`
Platforms []string `json:"platforms"`
Caveats string `json:"caveats"`
}
当我想构建我的go程序时,我收到一个错误,即无法读取JSON文件。但是一旦我删除map[string]struct
我就可以编译并运行程序而没有任何错误,一切正常。
我是否在处理某些事情或者我的JSON文件中是否有错误?
答案 0 :(得分:1)
提供的json无效(因为数组没有结束]
而顶级json对象缺少另一个结束}
)所以让我们假设它是这样的:
{
"jailbreaks": [
{
"jailbroken": false,
"name": "",
"version": "",
"url": "",
"anleitung": [],
"ios": {
"start": "10.2.1",
"end": ""
},
"platforms": [],
"caveats": ""
},
{
"jailbroken": true,
"name": "Yalu102",
"version": "beta 6",
"url": "https://domain-dl.tld",
"anleitung": [
{
"blog": "title",
"link": "http://domain.tld/"
},
{
"blog": "Test",
"link": "http://google.at"
}
],
"ios": {
"start": "10.2",
"end": ""
},
"platforms": [
"Windows",
"OS X",
"Linux"
],
"caveats": "some text here"
}
]
}
数据结构Jailbreaks
(第一个),marshals-to / unmarshals-来自这个json:
type Jailbreaks struct {
List []Jailbreak `json:"jailbreaks"`
}
type Jailbreak struct {
Jailbroken bool `json:"jailbroken"`
Name string `json:"name"`
Version string `json:"version"`
URL string `json:"url"`
Anleitung []struct {
Name string `json:"blog"`
Link string `json:"link"`
} `json:"anleitung"`
Firmwares struct {
Start string `json:"start"`
End string `json:"end"`
} `json:"ios"`
Platforms []string `json:"platforms"`
Caveats string `json:"caveats"`
}
如您所见,Anleitung
被声明为切片(而不是地图)。
答案 1 :(得分:-1)
使用omitempty
标记表示您的" anleitung"在JSON中是空的以供使用。但请注意,在这种情况下,您的Jailbreak
结构不会有" anleitung"字段。
将地图的json标志更改为;
Anleitung map[string]struct {
Name string `json:"blog"`
Link string `json:"link"`
} `json:"anleitung,omitempty"`
选项2;
我猜你也可以使用Anleitung map[string]interface{}
,但对于"将字符串映射保存到任意数据类型"会更好。在你的情况下,数据不是任意的,而是空的,我猜。看起来这只是暂时的。
我选择选项1,然后在访问之前检查我的结构是否包含任何Anleitung
数据。