Json JQ:根据子元素值替换数组元素

Json JQ:根据子元素值替换数组元素,json,string,replace,jq,Json,String,Replace,Jq,如果DOMAIN等于domain1.com jq'if.DATA[].DOMAIN==“domain1.com”然后.DATA[].DOMAIN\u DISABLE=true else。结束“${Json}” Json数组: { “操作”:“域.列表”, “数据”:[ { “类型”:“从”, “AXFR_IPS”:“无”, “域”:“domain1.com”, “TTL_秒”:0, “SOA_电子邮件”:“, “域名”:11111, “说明”:“, “过期秒”:0, “重试秒”:0, “地位”

如果
DOMAIN
等于
domain1.com

jq'if.DATA[].DOMAIN==“domain1.com”然后.DATA[].DOMAIN\u DISABLE=true else。结束“${Json}”
Json数组:

{
“操作”:“域.列表”,
“数据”:[
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain1.com”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:11111,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:false,
“LPM_显示组”:“,
“刷新秒”:0
},
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain2.net”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:22222,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:false,
“LPM_显示组”:“,
“刷新秒”:0
},
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain3.edu”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:33333,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:true,
“LPM_显示组”:“,
“刷新秒”:0
}
],
“ERRORARRAY”:[]
}
期望输出:

{
“操作”:“域.列表”,
“数据”:[
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain1.com”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:11111,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:true,
“LPM_显示组”:“,
“刷新秒”:0
},
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain2.net”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:22222,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:false,
“LPM_显示组”:“,
“刷新秒”:0
},
{
“类型”:“从”,
“AXFR_IPS”:“无”,
“域”:“domain3.edu”,
“TTL_秒”:0,
“SOA_电子邮件”:“,
“域名”:33333,
“说明”:“,
“过期秒”:0,
“重试秒”:0,
“地位”:1,
“域禁用”:true,
“LPM_显示组”:“,
“刷新秒”:0
}
],
“ERRORARRAY”:[]
}
我应该在jq命令中更改什么

jq '.DATA |= map(
        if .DOMAIN == "domain1.com"
        then .DOMAIN_DISABLE = true
        else .
        end)' file.json
这将改变
。数据
,同时保持所有其他内容。对于每个
.DOMAIN\u DISABLE
,我们将
.DOMAIN==“domain1.com”
的结果分配给每个
.DOMAIN==“domain1.com”



这将改变
。数据
,同时保持所有其他内容。对于每个
.DOMAIN\u DISABLE
,我们将
.DOMAIN==“domain1.com”

的结果分配给每个
.DOMAIN==“domain1.com”

,这实现了不同的要求,并且确实不会产生“预期”的输出。@peak我不确定我是否理解。您能详细说明一下吗?您的程序无条件更改。域_禁用,而声明的要求(OP显示的“预期”输出同意)仅设想有条件更新。另请参见@choroba的解决方案。@peak我看到了,但输出是相同的,尽管正确?否……。这实现了不同的要求,并且确实没有产生“预期”的输出。@peak我不确定我是否理解。您能详细说明一下吗?您的程序无条件更改。域_禁用,而声明的要求(OP显示的“预期”输出同意)仅设想有条件更新。另请参见@choroba的解决方案。@我明白了,但输出是相同的,尽管正确吗?不……。如果可能,请您添加解释?而且,在编辑之前它也在工作,为什么要更改它?另外,您能告诉我上面的
|=
是什么意思吗?我理解
|=
,这是更新分配,但我们不需要更新数据,只需要
。域\u禁用
,那么为什么我们以前要使用它?但我们需要保持在
映射所做的每个数据元素的上下文中。否则,您将无法查看域名。谢谢!你能告诉我关于更新的任务吗。它将为.DATA的每个元素运行映射,并用结果替换元素。如果可能,请添加解释?而且,在编辑之前它也在工作,为什么要更改它?另外,您能告诉我上面的
|=
是什么意思吗?我理解
|=
,这是更新分配,但我们不需要更新数据,只需要
。域\u禁用
,那么为什么我们以前要使用它?但我们需要保持在
映射所做的每个数据元素的上下文中。否则,您将无法查看域名。谢谢!你能告诉我关于更新的任务吗。它将为.DATA的每个元素运行映射,并用结果替换元素。
.DATA |= map((.DOMAIN == "domain1.com") as $disable | .DOMAIN_DISABLE |= $disable)