Go中的Marshal动态JSON字段标记

时间:2015-07-21 13:38:19

标签: json go terraform

我正在尝试为Terraform file生成JSON。因为我(我想)想要使用编组而不是滚动我自己的JSON,我使用的是Terraforms JSON格式而不是'原生'TF格式。

{
  "resource": [
    {
      "aws_instance": {
        "web1": {
          "some": "data"
        }
    }]
}

resourceaws_instance是静态标识符,而web1在这种情况下是随机名称。另外,web2web3也是不可想象的。

type Resource struct {
    AwsResource AwsResource `json:"aws_instance,omitempty"`
}

type AwsResource struct {
    AwsWebInstance AwsWebInstance `json:"web1,omitempty"`
}

然而问题; 如何使用Go的字段标记生成随机/变量JSON密钥?

我有一种感觉答案是“你没有”。那我还有什么其他选择呢?

1 个答案:

答案 0 :(得分:4)

在编译时名称未知的大多数情况下,可以使用地图:

type Resource struct {
    AWSInstance map[string]AWSInstance `json:"aws_instance"`
}

type AWSInstance struct {
    AMI string `json:"ami"`
    Count int `json:"count"`
    SourceDestCheck bool `json:"source_dest_check"`
    // ... and so on
}

这是一个显示如何构造编组值的示例:

r := Resource{
    AWSInstance: map[string]AWSInstance{
        "web1": AWSInstance{
            AMI:   "qdx",
            Count: 2,
        },
    },
}

playground example