将属性嵌套到JSON的Golang YAML

将属性嵌套到JSON的Golang YAML,json,parsing,go,yaml,Json,Parsing,Go,Yaml,我试图解析文件中的一些YAML,并将每个项转换为一个平面JSON对象 我对存在多个/嵌套对象的数据集有一些问题 我无法为每个文件解组多个项目 我不确定如何获得嵌套属性,例如“项目->说明->项目” 当我运行下面的代码时,我得到了错误 无法解组!!映射到[]项。项 我想我必须研究我的结构中的子类型,但我似乎什么都做不到 任何帮助都将不胜感激 代码: 项目结构: type Item struct { ID int Name string

我试图解析文件中的一些YAML,并将每个项转换为一个平面JSON对象

我对存在多个/嵌套对象的数据集有一些问题

  • 我无法为每个文件解组多个项目
  • 我不确定如何获得嵌套属性,例如“项目->说明->项目”
当我运行下面的代码时,我得到了错误

无法解组!!映射到[]项。项

我想我必须研究我的结构中的子类型,但我似乎什么都做不到

任何帮助都将不胜感激


代码:

项目结构:

type Item struct {
    ID            int
    Name          string  `yaml:"name"`
    Description   string  `yaml:"description"`
    GroupID       int     `yaml:"groupID"`
    IconID        int     `yaml:"iconID"`
    GraphicID     int     `yaml:"graphicID"`
    MarketGroupID int     `yaml:"marketGroupID"`
    Mass          float64 `yaml:"mass"`
    Published     bool    `yaml:"published"`
    Volume        float64 `yaml:"volume"`
}
所需的JSON格式:

{
    "ID":1563,
    "Description":"Radiates an omnidirectional pulse from the ship that causes EM damage to surrounding vessels.",
    "GroupID":72,
    "IconID":112,
    "GraphicID":72,
    "MarketGroupID":382,
    "Mass":10.0,
    "Published":true,
    "Volume":12.5
},
{...},
{...}
数据子集:

1563:
    description:
        de: Ein ungerichteter Rundum-Impuls der vom Schiff ausgestrahlt wird und bei
            umliegenden Schiffen EM-Schaden verursacht.
        en: Radiates an omnidirectional pulse from the ship that causes EM damage
            to surrounding vessels.
        fr: Émet une impulsion omnidirectionelle qui part du vaisseau et provoque
            des dégâts électromagnétiques à tous les vaisseaux situés à proximité.
        ja: 全方位にパルスを放射し、周囲の艦にEMダメージを与える。
        ru: Испускает сильный всенаправленный импульс, наносящий электромагнитный
            ущерб всем объектам, окружающим корабль.
        zh: 从舰船上发射一个全向脉冲,对周围船只造成电磁伤害。
    graphicID: 2032
    groupID: 72
    iconID: 112
    marketGroupID: 382
    mass: 10.0
    name:
        de: Small EMP Smartbomb I
        en: Small EMP Smartbomb I
        fr: Petite bombe de proximité à IEM I
        ja: 小型EMPスマートボムI
        ru: Small EMP Smartbomb I
        zh: 小型EMP立体炸弹 I
    portionSize: 1
    published: true
    radius: 1000.0
    volume: 12.5
1564:
    basePrice: 650000.0
    groupID: 152
    iconID: 112
    marketGroupID: 341
    name:
        de: Small EMP Smartbomb I Blueprint
        en: Small EMP Smartbomb I Blueprint
        fr: Plan de construction Petite bombe de proximité à IEM I
        ja: 小型EMPスマートボムIブループリント
        ru: Small EMP Smartbomb I Blueprint
        zh: 小型EMP立体炸弹蓝图 I
    portionSize: 1
    published: true
    volume: 0.01
1565:
    description:
        de: Ein ungerichteter Rundum-Impuls der vom Schiff ausgestrahlt wird und bei
            umliegenden Schiffen EM-Schaden verursacht.
        en: Radiates an omnidirectional pulse from the ship that causes EM damage
            to surrounding vessels.
        fr: Émet une impulsion omnidirectionelle qui part du vaisseau et provoque
            des dégâts électromagnétiques à tous les vaisseaux situés à proximité.
        ja: 全方位にパルスを放射し、周囲の艦にEMダメージを与える。
        ru: Испускает сильный всенаправленный импульс, наносящий электромагнитный
            ущерб всем объектам, окружающим корабль.
        zh: 从舰船上发射一个全向脉冲,对周围船只造成电磁伤害。
    graphicID: 2032
    groupID: 72
    iconID: 112
    marketGroupID: 382
    mass: 40.0
    name:
        de: Small EMP Smartbomb II
        en: Small EMP Smartbomb II
        fr: Petite bombe de proximité à IEM II
        ja: 小型EMPスマートボムII
        ru: Small EMP Smartbomb II
        zh: 小型EMP立体炸弹 II
    portionSize: 1
    published: true
    radius: 1000.0
    volume: 5.0

使结构如下所示:

type Language struct {
    De string `yaml:de`
    En string `yaml:en`
    Fr string `yaml:fr`
    Ja string `yaml:ja`
    Ru string `yaml:ru`
    Zh string `yaml:zh`
}

type Item struct {
    Description   Language `yaml:description`
    GroupID       int      `yaml:"groupID"`
    IconID        int      `yaml:"iconID"`
    GraphicID     int      `yaml:"graphicID"`
    MarketGroupID int      `yaml:"marketGroupID"`
    Mass          float64  `yaml:"mass"`
    Name          Language `yaml:name`
    Published     bool     `yaml:"published"`
    Volume        float64  `yaml:"volume"`
}

另外,据我所知,应该是
map[int]Item{}
而不是
map[int][]Item{}

谢谢Branislav,我真的很感谢你的帮助。这让我又取得了进步!在地图上的位置也很好。
type Language struct {
    De string `yaml:de`
    En string `yaml:en`
    Fr string `yaml:fr`
    Ja string `yaml:ja`
    Ru string `yaml:ru`
    Zh string `yaml:zh`
}

type Item struct {
    Description   Language `yaml:description`
    GroupID       int      `yaml:"groupID"`
    IconID        int      `yaml:"iconID"`
    GraphicID     int      `yaml:"graphicID"`
    MarketGroupID int      `yaml:"marketGroupID"`
    Mass          float64  `yaml:"mass"`
    Name          Language `yaml:name`
    Published     bool     `yaml:"published"`
    Volume        float64  `yaml:"volume"`
}