在 Go 中编组动态 JSON 字段标签
Marshal dynamic JSON field tags in Go
我正在尝试为 Terraform file 生成 JSON。因为我(认为我)想使用编组而不是滚动我自己的 JSON,所以我使用 Terraforms JSON 格式而不是 'native' TF 格式。
{
"resource": [
{
"aws_instance": {
"web1": {
"some": "data"
}
}]
}
resource
和 aws_instance
是静态标识符,而 web1
在这种情况下是随机名称。此外,web2
和 web3
.
也不是不可想象的
type Resource struct {
AwsResource AwsResource `json:"aws_instance,omitempty"`
}
type AwsResource struct {
AwsWebInstance AwsWebInstance `json:"web1,omitempty"`
}
不过问题来了; 如何使用 Go 的字段标签生成 random/variable JSON 键?
我感觉答案是 "You don't"。那我还有什么其他选择?
在大多数情况下,编译时名称未知,可以使用映射:
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,
},
},
}
我正在尝试为 Terraform file 生成 JSON。因为我(认为我)想使用编组而不是滚动我自己的 JSON,所以我使用 Terraforms JSON 格式而不是 'native' TF 格式。
{
"resource": [
{
"aws_instance": {
"web1": {
"some": "data"
}
}]
}
resource
和 aws_instance
是静态标识符,而 web1
在这种情况下是随机名称。此外,web2
和 web3
.
type Resource struct {
AwsResource AwsResource `json:"aws_instance,omitempty"`
}
type AwsResource struct {
AwsWebInstance AwsWebInstance `json:"web1,omitempty"`
}
不过问题来了; 如何使用 Go 的字段标签生成 random/variable JSON 键?
我感觉答案是 "You don't"。那我还有什么其他选择?
在大多数情况下,编译时名称未知,可以使用映射:
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,
},
},
}