使用arg过滤器进行jq解析不会产生预期的结果

时间:2017-12-22 15:45:47

标签: jq

使用带字符串连接的--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" 
         }

1 个答案:

答案 0 :(得分:0)

我担心你必须先了解一下jq,然后才能有效地使用它。在尝试把所有东西放在一起之前,我建议一点一点地掌握一些东西。

让我们从--arg inp4 "$keypassword"开始。这将shell变量传递给jq美元变量,其结果是将jq变量$ inp4设置为shell变量$ keypassword的字符串值。然后,您可以使用$inp4作为jq变量,就像其他任何变量一样 - 所以它周围没有引号。

了解如何使用的另一个有用的事情是-f命令行选项。这应该可以节省你很多时间和恶化。

顺便说一句,当你最终将所有内容放在一起时,你只需要调用一次jq。