首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jq:如果数据已经存在,如何只更新数据?

jq:如果数据已经存在,如何只更新数据?
EN

Stack Overflow用户
提问于 2017-09-16 07:20:54
回答 4查看 83关注 0票数 0

对于jq的开发版本,这可以通过jq '.x.y |= if . then 123 else empty end'来完成。(因为解决了bug #13134。)

我如何在JQ1.5中做到这一点?

示例:

{"x": {"y": 5}}中,y应更改为123,

但在{"x": {"z": 9}}中,应该不会有任何变化。

EN

回答 4

Stack Overflow用户

发布于 2017-09-16 07:32:08

您需要使用|=吗?如果不是,你可以使用普通赋值吗?例如:

代码语言:javascript
运行
复制
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
'

输出

代码语言:javascript
运行
复制
{"x":{"y":123}}
{"x":{"z":9}}    
票数 1
EN

Stack Overflow用户

发布于 2017-09-16 16:37:28

使用内置的has()函数:

代码语言:javascript
运行
复制
jq -nc '{"x":{"y": 5}} | if (.x | has("y")) then .x.y=123 else empty end'

输出:

代码语言:javascript
运行
复制
{"x":{"y":123}}
票数 1
EN

Stack Overflow用户

发布于 2017-09-20 09:23:23

以下两种方法都会产生所需的结果(无论是使用1.5还是更高版本),但在语义上有重要的区别(与{"x": null}{}之间的区别有关):

代码语言:javascript
运行
复制
if has("x") and (.x | has("y")) then .x.y = 123 else . end
代码语言:javascript
运行
复制
if .x.y? then .x.y = 123 else . end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46248576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档