Json 将[string]结构映射到结构内部

Json 将[string]结构映射到结构内部,json,go,Json,Go,我有一个JSON文件,如下所示: { "jailbreaks": [ { "jailbroken": false, "name": "", "version": "", "url": "", "anleitung": [], "ios": { "start": "10.2.1" }, "caveats": "", "platforms": [] },

我有一个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"`
}
我创建了要处理的对象,如下所示:

{
  "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属性是一个数组而不是一个对象。它与解组不兼容。