如何使用jq创建增量索引 [英] How do I create an incremental index with jq

查看:111
本文介绍了如何使用jq创建增量索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像这样的json:

I have a json like that :

[
{"data":"a"},
{"data":"b"},
{"data":"c"}
]

使用jq,我想添加一个增量ID字段:

using jq I want to add an incremental id field like that:

[
{"data":"a","id":"xx_1"},
{"data":"b","id":"xx_2"},
{"data":"c","id":"xx_3"}
]

有人似乎无法让他正确的jq命令吗?

I can't seem to get he right jq command for that, anyone?

编辑 我需要使用bash命令执行此操作

EDIT i need to do this using bash commands

推荐答案

这是一种方法:

to_entries | map( (.value.id = "xx_\(1+.key)" ) | .value)

这是另一种方法,但是需要jq 1.5:

Here's another method, which however requires 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定义,例如通过谷歌搜索.)

(If your jq does not have transpose/0, it's jq definition can readily be found, e.g. by googling.)

这篇关于如何使用jq创建增量索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆