如何将函数应用于jq中的多个字段
我尝试减少jq呼叫的大小。当前命令是:如何将函数应用于jq中的多个字段,jq,Jq,我尝试减少jq呼叫的大小。当前命令是: jq.result |.[].newValueJson.action |=(.| tostring/)|.[].oldValueJson.action |=(.| tostring/).[].metadata.value |=(.| tostring/)” 如您所见,函数“tostring”以相同的方式应用于“newValueJson.action”、“oldValueJson.action”和“metadata.value”。我想知道是否有更紧凑的语法
jq.result |.[].newValueJson.action |=(.| tostring/)|.[].oldValueJson.action |=(.| tostring/).[].metadata.value |=(.| tostring/)”
如您所见,函数“tostring”以相同的方式应用于“newValueJson.action”、“oldValueJson.action”和“metadata.value”。我想知道是否有更紧凑的语法,所以我只需要应用一次tostring
我提取的示例数据显示了正在执行的操作(这不是完整的json树)
资料来源:
{
“结果”:[{
“id”:1,
“行动”:{
“结果”:正确,
“类型”:“过滤器\创建”
},
“newValueJson”:{
“动作”:“模拟”
},
“oldValueJson”:{
“行动”:“强制执行”
},
“元数据”:{
“值”:false
}
},
{
“id”:2,
“行动”:{
“结果”:正确,
“类型”:“过滤器\创建”
},
“newValueJson”:{
“行动”:{
“模式”:“模拟”,
“超时”:3600
}
},
“oldValueJson”:{
“行动”:{
“模式”:“强制执行”,
“超时”:3600
}
},
“元数据”:{
“值”:“关”
}
}
]
}
结果:
[{
“id”:1,
“行动”:{
“结果”:正确,
“类型”:“过滤器\创建”
},
“newValueJson”:{
“动作”:“模拟”
},
“oldValueJson”:{
“行动”:“强制执行”
},
“元数据”:{
“值”:“假”
}
},
{
“id”:2,
“行动”:{
“结果”:正确,
“类型”:“过滤器\创建”
},
“newValueJson”:{
“操作:“{\”模式:“\”模拟“,“\”超时“:3600}”
},
“oldValueJson”:{
“操作:“{\”模式\:\”强制\“,\”超时\“:3600}”
},
“元数据”:{
“值”:“关”
}
}
]
非常感谢。您可以使用
(…)
将操作分组,如下所示。另外,您可以使用映射(..)
来处理结果
数组中的过滤器表达式,而不是使用数组表示法[]
.result | map((.newValueJson.action, .oldValueJson.action, .metadata.value ) |= (. | tostring // .))
请显示您的JSON和预期输出。单靠尝试是不行的help@Inian当然感谢您的提问,我添加了示例json。由于
tostring
从不返回null
或false
,我不认为(.| tostring/)
与单纯的tostring
不同。如果您的结果
数组中可能有缺少某些路径的对象,并且您的目的是避免创建“null”
字段,那么您可以使用值
过滤器,如.result |(.]|.newValueJson.action、.oldValueJson.action、.metadata.value | values)|=tostring
。