增量索引我这样一个JSON有:如何创建与JQ
[
{"data":"a"},
{"data":"b"},
{"data":"c"}
]
使用JQ我想添加一个递增ID字段这样的:
[
{"data":"a","id":"xx_1"},
{"data":"b","id":"xx_2"},
{"data":"c","id":"xx_3"}
]
我不能似乎让他对那个jq命令,任何人?
EDIT 我需要做此使用bash命令
增量索引我这样一个JSON有:如何创建与JQ
[
{"data":"a"},
{"data":"b"},
{"data":"c"}
]
使用JQ我想添加一个递增ID字段这样的:
[
{"data":"a","id":"xx_1"},
{"data":"b","id":"xx_2"},
{"data":"c","id":"xx_3"}
]
我不能似乎让他对那个jq命令,任何人?
EDIT 我需要做此使用bash命令
这里有一种方法:
to_entries | map((.value.id = "xx_\(1+.key)") | .value)
这里的另一种方法,然而这需要JQ 1.5:
def add_id(prefix):
[ foreach .[] as $o (0;
. + 1;
$o + {"id": (prefix + tostring) }) ];
add_id("xx_")
实施例:
$ jq -c -f add_id.jq
[ {"data":"a"}, {"data":"b"}, {"data":"c"} ]
输出:
[{"data":"a","id":"xx_1"},{"data":"b","id":"xx_2"},{"data":"c","id":"xx_3"}]
第三种方法是使用transpose
:
def add_id(prefix):
[ ., [ range(0;length) | {"id": (prefix + tostring) } ] ]
| transpose | map(add);
(如果你的JQ不具有转/ 0,这是JQ定义可以很容易地发现,如通过谷歌搜索。)
var data=[
{"data":"a"},
{"data":"b"},
{"data":"c"}
];
var cnt=0;
data.map(function(data){
data.id="xx_"+cnt;
cnt++;
})
console.log(data);
对不起,我忘了提及我需要使用bash创建它......我将编辑 – UVRadiation
这里有两个解决方案。一个使用foreach,它在foreach状态下持有一个计数器,同时遍历输入数组将数据收集回结果数组中。这与peak的add_id函数类似。
[
foreach .[] as $e (
0
; .+1
; $e + {"id":"xx_\(.)"}
)
]
和一个使用减少保持所述输入阵列中的降低状态,而遍历数组索引,更新每个元素。
reduce range(0,length) as $i (
.
; .[$i].id = "xx_\($i+1)"
)
我觉得减少是这种情况下,简单的一个。
好的!你摇滚! :) – hek2mgl
谢谢!很棒! – UVRadiation