如何设置条件jq变换?
How to set up conditional jq transform?
我需要转换一个 JSON,它可以有 1 个值或 2 个值。所以它可以是:
{"form":{"textinput1":"aaa"},"params":{"context":""}}
或
{"form":{"textinput1":"aaa"},"params":{"context": "something"}}
我需要的输出是这样的:
{"input": {"text": "aaa"}}
或
{"input": {"text": "aaa"},"context": "something"}}
JQ 转换为:
{"input": {"text": .form.textinput1}}
或
{"input": {"text": .form.textinput1},"context":.params.context}
但是如何将这两个合并成一个条件呢?
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
是否为空
jq 有两个基本条件:if ... then ... else ... end
和 A // B
。在你的情况下,第一个就足够了:
{"input": {"text": .form.textinput1}}
+ (.params.context | if . == "" then null else {"context":.} end)
如果你需要对.context
进行一些转换,比如f,如果它不是“”,那么将最后的.
替换为f
。
我需要转换一个 JSON,它可以有 1 个值或 2 个值。所以它可以是:
{"form":{"textinput1":"aaa"},"params":{"context":""}}
或
{"form":{"textinput1":"aaa"},"params":{"context": "something"}}
我需要的输出是这样的:
{"input": {"text": "aaa"}}
或
{"input": {"text": "aaa"},"context": "something"}}
JQ 转换为:
{"input": {"text": .form.textinput1}}
或
{"input": {"text": .form.textinput1},"context":.params.context}
但是如何将这两个合并成一个条件呢?
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
是否为空
jq 有两个基本条件:if ... then ... else ... end
和 A // B
。在你的情况下,第一个就足够了:
{"input": {"text": .form.textinput1}}
+ (.params.context | if . == "" then null else {"context":.} end)
如果你需要对.context
进行一些转换,比如f,如果它不是“”,那么将最后的.
替换为f
。