我需要转换一个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}
但是如何将这两者合并为一个条件?
答案 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 ... end
和A // B
。在你的情况下,第一个就足够了:
{"input": {"text": .form.textinput1}}
+ (.params.context | if . == "" then null else {"context":.} end)
如果您需要将某些转化(例如f)应用于.context
,如果它不是“”,则将.
替换为f
。