有没有更好的方法来声明json变量

时间:2018-10-31 07:22:47

标签: go

声明类型为map [string] map [string] ...的变量不是很理想,有没有更好的方法

[
  {
    "_type": "EntityParent",
    "name": "Test000",
    "_id": 1,
    "parentid": -1
  },
  {
    "_type": "EntityChild1",
    "name": "Test222",
    "_id": 2,
    "parentid": 1
  },
  {
    "_type": "EntityChild2",
    "name": "Test333",
    "_id": 3,
    "parentid": 1
  },
  {
    "_type": "EntityChild2_1",
    "name": "Test444",
    "_id": 6,
    "parentid": 3
  },
  {
    "_type": "EntityChild2_1_1",
    "name": "Test555",
    "_id": 7,
    "parentid": 6
  },
  {
    "_type": "EntityChild3",
    "name": "Test111 ",
    "_id": 4,
    "parentid": 1
  },
  {
    "_type": "EntityChild4",
    "name": "Test666",
    "_id": 5,
    "parentid": 1
  }
]

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用类型map[string]interface{}。由于空接口interface{}可以引用任何类型,因此可以处理JSON的任意嵌套性质。

为此,您必须先将文字数据写为字符串,然后将其解析为Go map

请记住,这里是您的示例的重构:

首先:import "encoding/json",然后

snapsStr := `{
    "distros": {
        "aws": {
            "eu-west-1" : {
                "snap-0": "/dev/sdm"
            },
            "eu-west-2": {
                "snap-1": "/dev/sdm"
            }
        }
    }
}`

var snaps map[string]interface{}

json.Unmarshal([]byte(snapsStr), &snaps)

现在snaps就可以了。

这是Go中JSON数据最通用的格式,也是Go JSON库处理JSON类型的方式之一。请参阅以下文档:https://golang.org/pkg/encoding/json/#Unmarshal