在Go中Marshal动态JSON字段标签



我正在尝试为Terraform文件生成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"`
}

然而问题是;我如何生成随机/变量JSON键与Go的字段标签?

我有一种感觉,答案是"你没有"。那我还有别的选择吗?

在大多数情况下,如果在编译时存在未知的名称,则可以使用映射:

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,
        },
    },
}

操场示例

最新更新