英文:
How do I convert HashiCorp Configuration Language into JSON?
问题
为了更好地理解 Terraform,我想要能够将 HCL 转换为等效的 JSON。我已经成功构建了 HCL 解析器(https://github.com/hashicorp/hcl)并运行了测试,但我没有找到任何命令可以接受一个 HCL 文件并输出 JSON。
有一个 Python 实现的 HCL,它包含一个将 HCL 转换为 JSON 的实用工具,但它有一些相当奇怪/意外的行为,我想确认这种行为是来自 HCL 语言而不是特定于 Python 实现。例如:
> cat foo.tf
service {
key = "aaa"
}
service {
key = 0x10
foo = "bar"
}
> hcltool foo.tf
{
"service": [
{
"foo": "bar",
"key": "aaa"
},
{
"key": 16
}
]
}
英文:
In order to better understand terraform I'd like to be able to translate HCL into the equivalent JSON. I got the HCL parser (https://github.com/hashicorp/hcl) to build and the tests to run but I don't see any command to take in an HCL file and output JSON.
There's a python implementation of HCL and it includes a utility that converts HCL to JSON, but it has some rather strange/unexpected behavior, and I would like to confirm that the behavior comes from the HCL language and isn't specific to the python implementation. e.g.
> cat foo.tf
service {
key = "aaa"
}
service {
key = 0x10
foo = "bar"
}
> hcltool foo.tf
{
"service": [
{
"foo": "bar",
"key": "aaa"
},
{
"key": 16
}
]
}
答案1
得分: 12
有一个开源项目叫做json2hcl
,你可以使用它来帮助你,但是 Terraform HCL 不是按照他们设计的标准来的。在这里解释了这个问题:
https://github.com/kvz/json2hcl/issues/4#issuecomment-275513256
不幸的是,这个行为是由 Hasicorp 官方的 HCL 库引起的,因为 HCL 格式存在歧义。因此,我们无法真正改善这种情况。我们在过去也进行过类似的讨论,如果你想要了解更多关于这个主题以及为什么这可能在未来不会改变的信息:
你可以安装这个相关的仓库来使用这个工具:
https://github.com/kvz/json2hcl
这里有一个将 fixtures/infra.tf.json
转换为 HCL 的示例:
$ json2hcl < fixtures/infra.tf.json > fixtures/infra.tf
作为额外的功能,也支持通过 -reverse
标志来进行反向转换:
$ json2hcl -reverse < fixtures/infra.tf
英文:
There is an open source project json2hcl
and you can use for help, but terraform hcl is not standard as they designed. Explain here:
https://github.com/kvz/json2hcl/issues/4#issuecomment-275513256
>Sadly, this behavior is caused by Hasicorp's official HCL library due to ambiguities in the HCL format. Therefore, we are not really able to improve this situation. We had similar discussions in the past, if you may want to read more on this topic and why this will probably not be changed in the future:
Related repo that you can install the tool:
https://github.com/kvz/json2hcl
Here's an example fixtures/infra.tf.json being converted to HCL:
$ json2hcl < fixtures/infra.tf.json > fixtures/infra.tf
As a bonus, the other way around is also supported via the -reverse flag:
$ json2hcl -reverse < fixtures/infra.tf
答案2
得分: 5
这个网站对于在HCL、JSON和YAML之间进行一次性转换非常有用:
https://www.hcl2json.com/
英文:
This site is useful for one-off conversions between HCL, JSON, and YAML:
https://www.hcl2json.com/
答案3
得分: 1
你也可以使用HCL2,如下所示:
with open('main.tf', 'r') as file:
temp_dict = hcl2.load(file)
英文:
You can also use HCL2, like below:
with open('main.tf', 'r') as file:
temp_dict = hcl2.load(file)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论