使用带字符串连接的--arg的jq解析器不会提供正确的json输出。输入文件是'test.json',输出文件是'final.json'
这是输入json文件 test.json --------- { “ParameterKey1”:“”, “Parameterkey2”:“” }
Tried test.json with 2nd filter
jq --arg inp4 "$keypassword" \
'if .ParameterKey1 == "<value1>"
then . + {"ParameterKey1" : ($input1) }
else . end' | jq --arg inp5 "$value2" \
'if .Parameterkey2 == "<value2>"
then . + {"value2" : ($input2) }
else . end' test.json > final.json
Tried test.json with 1st filter
jq --arg inp4 "$key" \
'if .ParameterKey1 == "<value1>"
then . + {"ParameterKey1" : ($input1) }
else . end' test.json | jq --arg inp5 "$value2" \
'if .Parameterkey2 == "<value2>"
then . + {"value2" : ($input2) }
else . end' > final.json
Tried test.json in both filters
jq --arg inp4 "$key" \
'if .ParameterKey1 == "<value1>"
then . + {"ParameterKey1" : ($inp4) }
else . end' test.json | jq --arg inp5 "$value2" \
'if .Parameterkey2 == "<value2>"
then . + {"value2" : ($inp5) }
else . end' test.json > final.json
Expected output: (final.json)
{
"ParameterKey1": "value",
"Parameterkey2": "value"
}
答案 0 :(得分:0)
我担心你必须先了解一下jq,然后才能有效地使用它。在尝试把所有东西放在一起之前,我建议一点一点地掌握一些东西。
让我们从--arg inp4 "$keypassword"
开始。这将shell变量传递给jq美元变量,其结果是将jq变量$ inp4设置为shell变量$ keypassword的字符串值。然后,您可以使用$inp4
作为jq变量,就像其他任何变量一样 - 所以它周围没有引号。
了解如何使用的另一个有用的事情是-f
命令行选项。这应该可以节省你很多时间和恶化。
顺便说一句,当你最终将所有内容放在一起时,你只需要调用一次jq。