如何用JQ按索引顺序将JSON数组对象对应添加到目标JSON?
解决方案
你需要让masterfile.json里value数组的第n个元素,对应newValArr的第n个对象,核心是给两个数组的元素按索引配对。原来的脚本每次都取$newvalues[0],所以所有元素都用了第一个对象,改一下JQ逻辑就行。
方法一:索引遍历法
直接通过索引定位两个数组的对应元素,修改value数组:
jq --argjson newvalues "${newValArr}" '.value |= (range(length) as $i | .[$i].properties.newObject = $newvalues[$i])' masterfile.json > newoutput.json
range(length)生成和数组长度匹配的索引序列- 对每个索引
$i,把value[$i]的properties.newObject设为$newvalues[$i]
方法二:数组转置配对法
把两个数组转置后配对,再修改元素:
jq --argjson newvalues "${newValArr}" '.value = ($newvalues, .value) | transpose | map(.[1].properties.newObject = .[0] | .[1])' masterfile.json > newoutput.json
($newvalues, .value)把两个数组打包成二维数组transpose转置后,每个子数组变成[newValArr元素, value数组元素]map遍历每一组,给第二个元素(原value元素)添加newObject,再提取处理后的原元素重新赋值给.value
两种方法都能实现按索引对应赋值,前提是你确认两个数组长度完全一致。
内容的提问来源于stack exchange,提问作者Desitos
相关产品推荐
相关产品推荐

