将带有键=值对的文本文件转换为 jq 中的特定 json 格式



我有一个文本文件,其中包含以下值 输入.txt

key1=value1r
key2=value2
key3=value3r
key4=value4

需要 jq rexpression 通过删除"\r"将其转换为以下 JSON 格式

输出.json

{
"Environment": {
"Variables": {
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4"
}
}

}

我已经尝试了以下表达式并得到

jq -Rs [ split("n")[] | select(length > 0) | split("=") | {(.[0]): .[1]} ] 

并获得以下输出

[
{
"key1ey1": "Value1r"
},
{
"key2": "value2"
},
{
"key3": "value3r"
},
{
"key4": "value4"
}
]

jq解决方案:

jq -sR '{"Environment":
{"Variables": [split("n")[:-1][] | rtrimstr("\r") 
| split("=") | {(.[0]): .[1]}
]  | add
}
}' input.txt

输出:

{
"Environment": {
"Variables": {
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4"
}
}
}

警告

此解决方案假定=不会出现在输入字符串的"值"部分中。

以下方法允许=出现在key=value字符串的值部分中:

调用: jq -n -R -f program.jq input.txt

程序.jq:

[inputs | sub("\\r$";"") | capture("^(?<key>[^=]*)=(?<value>.*)")]
| from_entries
| {Environment: { Variables: .}}

最新更新