如何设置条件jq变换?

时间:2017-11-28 09:42:50

标签: json conditional jq

我需要转换一个JSON,它可以有1个值或2.所以它可以是:

{"form":{"textinput1":"aaa"},"params":{"context":""}}

{"form":{"textinput1":"aaa"},"params":{"context": "something"}}

我需要的输出是:

{"input": {"text": "aaa"}}

{"input": {"text": "aaa"},"context": "something"}}

JQ Transform将是:

{"input": {"text": .form.textinput1}}

{"input": {"text": .form.textinput1},"context":.params.context}

但是如何将这两者合并为一个条件?

2 个答案:

答案 0 :(得分:1)

jq 解决方案:

jq '.params.context as $ctx 
    | {input: {text:.form.textinput1}} 
    + (if ($ctx | length) > 0 then {context:$ctx} else {} end)' file.json
  • .params.context as $ctx - 将.params.context值分配给变量$ctx
  • if ($ctx | length) > 0 - 检查$ctx是否为空

答案 1 :(得分:1)

jq有两个基本条件:if ... then ... else ... endA // B。在你的情况下,第一个就足够了:

{"input": {"text": .form.textinput1}}
+ (.params.context | if . == "" then null else {"context":.} end)

如果您需要将某些转化(例如f)应用于.context,如果它不是“”,则将.替换为f