将两个jq过滤器合二为一

时间:2018-01-03 06:31:10

标签: jq

jq滤镜如何组合滤镜输出?以下jq不会生成带有相应输入arg值('jack')的output.json。

input.json

{
"key1": "",
"key2": ""
}

 jq --arg input "$username" \
          'if .key1 == "<value1>"
                 then . + {"key1" : ($input) }
          else . end' input.json |
          'if .key2 == "<value2>"
                 then . + {"key2" : ($input) }
          else . end'  >  output.json

output.json

{
"key1": "jack",
"key2": "jack"
}

1 个答案:

答案 0 :(得分:0)

您明显想要编写的过滤器是:

      if .key1 == "" then . + {"key1" : $input } else . end
      | if .key2 == "" then . + {"key2" : $input } else . end

这可以简化为:

      if .key1 == "" then .key1 = $input else . end
      | if .key2 == "" then .key2 = $input else . end

您可能还想考虑以下方法:

      def update(f): f |= (if . == "" then $input else . end);
      update(.key1) | update(.key2)