Json 将[string]结构映射到结构内部
我有一个JSON文件,如下所示:Json 将[string]结构映射到结构内部,json,go,Json,Go,我有一个JSON文件,如下所示: { "jailbreaks": [ { "jailbroken": false, "name": "", "version": "", "url": "", "anleitung": [], "ios": { "start": "10.2.1" }, "caveats": "", "platforms": [] },
{
"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"`
}
我创建了要处理的对象,如下所示:
{
"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文件中有错误?使用
ommitempty
标记,表示要使用的JSON中的“anleitung”为空。不过要小心,如果是这样,您的越狱结构将不会有“anleitung”字段
将地图的json标志更改为
Anleitung map[string]struct {
Name string `json:"blog"`
Link string `json:"link"`
} `json:"anleitung,omitempty"`
备选案文2
我想您也可以使用Anleitung-map[string]接口{}
,但这对于“保存字符串到任意数据类型的映射”来说更好。在你的例子中,数据不是任意的,而是空的。看起来这只是暂时的
我会选择选项1,然后在访问它之前,我会检查我的结构是否包含任何
Anleitung
数据。提供的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"
}
]
}
数据结构越狱(第一个),正确地封送/解封此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
被声明为一个片(不是一个映射)。在json中,“Anleitung”
是一个数组,您不能将其解组为一个映射。json中的Anleitung属性是一个数组而不是一个对象。它与解组不兼容。