【问题标题】:What is the ideal way to JSON.stringify in Terraform?在 Terraform 中进行 JSON.stringify 的理想方式是什么?
【发布时间】:2023-02-15 11:30:21
【问题描述】:

我正在处理我的第一个 Terraform 项目,我正在寻找对 JSON 对象进行字符串化的最佳方法。我正在定义的资源有一个需要 JSON 字符串的参数。 JSON结构为:

  "document": {
    "tag": "String Title",
    "response": "There's a string response and perhaps a price like $[XX.XX]."
  }
}

我不认为 jsonencode 或 jsondecode 会这样做。我可以提前对它们进行字符串化,但在这种情况下这是不可扩展的。我不确定我是否可以使用 JavaScript 或其他语言以及 Terraform 来做到这一点,或者 HCL 中是否有一个函数可以做到这一点。

【问题讨论】:

  • 这正是 jsonencode 所做的。你为什么说jsonencode 不适合你?
  • @MarkB 那里的文档和示例看起来不像:developer.hashicorp.com/terraform/language/functions/jsonencode
  • 我想您需要展示更多您认为您的 Terraform 应该是什么样子,以及您希望最终结果如何。 developer.hashicorp.com/terraform/language/functions/jsonencode 链接中的示例看起来完全符合您的需要。 Terraform 根本没有 JSON 对象的概念。 Terraform 不是 JavaScript。 Terraform 是用 HCL 编写的,具有 HCL 对象。 jsonencode 函数可以获取 Terraform 代码中定义的 HCL 对象,并将其转换为 JSON 字符串,用于需要 JSON 字符串的资源。

标签: json terraform hcl


【解决方案1】:

Terraform 中的jsonencode 完全等同于 JavaScript 中只有一个参数的 JSON.stringify

例如,如果您需要将包含 JSON 对象的字符串分配给名为 something_json 的参数,您可以这样做:

  something_json = jsonencode({
    document = {
      tag      = "String Title"
      response = "There's a string response and perhaps a price like $[XX.XX]."
    }
  })

上面的代码会将 something_json 设置为以下 JSON 的缩小版本:

{
  "document": {
    "tag": "String Title",
    "response": "There's a string response and perhaps a price like $[XX.XX]."
  }
}

Terraform 没有等效于 JavaScript 的 JSON.stringify 中的可选 replacerspace 参数:

  • Terraform 中不需要 replacer 的等价物,因为 Terraform 语言中的所有可能值都有一个已定义的 JSON 等价物,如 the jsonencode documentation 中的表所述。
  • space 用于生成非缩小的 JSON; Terraform 没有提供任何方法来做到这一点,因为它专注于为机器消费生成 JSON,因此更愿意生成尽可能紧凑的表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2015-10-10
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多