Bash 将简单JSON对象转换为属性文件

Bash 将简单JSON对象转换为属性文件,bash,sh,jq,Bash,Sh,Jq,我有一个简单的JSON对象,希望在bash中将其转换为属性文件 输入: { "foo": "bar", "abc": "def ghi" } 预期产出: foo="bar" abc="def ghi" 您可以使用来添加条目: jq -r 'to_entries[]|"\(.key)=\"\(.value)\""' input.json 顺便说一句,在Java属性文件中,您不需要引用以下值: jq -r 'to_entries[]|"\(.key)=\(.value)"' i

我有一个简单的JSON对象,希望在bash中将其转换为属性文件

输入:

{
    "foo": "bar",
    "abc": "def ghi"
}
预期产出:

foo="bar"
abc="def ghi"

您可以使用
来添加条目

jq -r 'to_entries[]|"\(.key)=\"\(.value)\""' input.json
顺便说一句,在Java属性文件中,您不需要引用以下值:

jq -r 'to_entries[]|"\(.key)=\(.value)"' input.json

实际上,“to_条目”和“@sh”过滤器的使用只适用于简单的JSON对象(如问题中所述…)。在我的例子(嵌套json)中,我将使用npm的包“json to properties”

使用
@sh
,而不是自己引用值;这对于确保像
{“key”:“\“value\”}
这样的内容正确引用是必要的。(
“…|“\(.key)=\(.value |@sh)”
)@chepner OP想写一个属性文件,这让我想到了Java。这些文件遵循与shell不同的语法规则。事实上,双引号是完全没有必要的。好吧,op似乎在期待它们。如果双引号确实不必要,我会把它们删掉。如果值本身包含引号,结果将不正确。我不是Java专家,可能它们只是多余的。我可以把它作为替代品。不幸的是,它不适用于嵌套结构(如Spring Boot
application.yml