对于jq的开发版本,这可以通过jq '.x.y |= if . then 123 else empty end'
来完成。(因为解决了bug #13134。)
我如何在JQ1.5中做到这一点?
示例:
在{"x": {"y": 5}}
中,y应更改为123,
但在{"x": {"z": 9}}
中,应该不会有任何变化。
发布于 2017-09-16 07:32:08
您需要使用|=
吗?如果不是,你可以使用普通赋值吗?例如:
jq -Mnc '
{"x": {"y": 5}} | if .x.y != null then .x.y = 123 else . end
, {"x": {"z": 9}} | if .x.y != null then .x.y = 123 else . end
'
输出
{"x":{"y":123}}
{"x":{"z":9}}
发布于 2017-09-16 16:37:28
使用内置的has()
函数:
jq -nc '{"x":{"y": 5}} | if (.x | has("y")) then .x.y=123 else empty end'
输出:
{"x":{"y":123}}
发布于 2017-09-20 09:23:23
以下两种方法都会产生所需的结果(无论是使用1.5还是更高版本),但在语义上有重要的区别(与{"x": null}
和{}
之间的区别有关):
if has("x") and (.x | has("y")) then .x.y = 123 else . end
if .x.y? then .x.y = 123 else . end
https://stackoverflow.com/questions/46248576
复制相似问题