【问题标题】:jq parsing with arg filters does not give expected result使用 arg 过滤器进行 jq 解析没有给出预期的结果
【发布时间】:2017-12-22 15:45:46
【问题描述】:

带有--arg 和字符串连接的jq 解析器不能提供正确的json 输出。输入文件是'test.json',输出文件是'final.json'

这是输入的json文件 测试.json --------- { "ParameterKey1": "", “参数key2”:“” }

    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" 
         }

【问题讨论】:

    标签: jq


    【解决方案1】:

    恐怕您必须先了解一些有关 jq 的知识,然后才能有效地使用它。我建议在尝试将所有内容放在一起之前一点一点地掌握事物。

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

    知道如何使用的另一个有用的东西是-f 命令行选项。这应该可以为您节省很多时间和烦恼。

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

    【讨论】:

    • 能否提供带-f命令行选项单次调用jq的代码。
    • 我相信即使我们使用 -f 命令行选项它也需要加重
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2021-10-25
    • 2020-05-29
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多