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)