Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将函数应用于jq中的多个字段_Jq - Fatal编程技术网

如何将函数应用于jq中的多个字段

如何将函数应用于jq中的多个字段,jq,Jq,我尝试减少jq呼叫的大小。当前命令是: jq.result |.[].newValueJson.action |=(.| tostring/)|.[].oldValueJson.action |=(.| tostring/).[].metadata.value |=(.| tostring/)” 如您所见,函数“tostring”以相同的方式应用于“newValueJson.action”、“oldValueJson.action”和“metadata.value”。我想知道是否有更紧凑的语法

我尝试减少jq呼叫的大小。当前命令是:

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