将JSON解析为结构

时间:2015-06-23 22:54:36

标签: json parsing go

当我们使用常规键值格式时,我已成功将JSON解析为结构。

但是,我如何解析这样的JSON:

{
  "count": 2,
  "results": [{ key: "workspaces", id: "10" }, { key: "workspaces", id: "11" }],
  "workspaces": {
    "10": {
      id: "10",
      title: "some project",
      participant_ids: ["2", "6"],
      primary_counterpart_id: "6"
    },
    "11": {
      id: "11",
      title: "another project",
      participant_ids: ["2", "8"],
      primary_counterpart_id: "8"
    }
  }
}

workspaces部分的密钥未提前定义,而是保留工作区ID?

我最初的结构是:

type WorkspaceRequest struct {
    Count      int64       `json:"count"`
    Workspaces []Workspace `json:"workspaces"`
}

type Workspace struct {
    Title string `json:"title"`
}

如何从显示的JSON中获取工作区列表?

1 个答案:

答案 0 :(得分:6)

问题在于您将Workspaces表示为模型中的数组,但它是json中的字典/地图。只需将其设为map[sting]Workspace即可。第一项将与instance.Workspaces["11"]

一起使用

有几条暗示我是怎么知道的; 1)使用大括号{打开工作区,数组永远不是正确的类型(它们总是被json中的[]括起来),它是一个对象或一个地图。 2)其中的项目表示为"11": { ... }。这意味着如果我用Go中的对象表示它我需要一个名为1112等的属性,可以非常安全地假设这不是你想要的,这意味着它必须是地图。