我用jq来描述我想要的输出

这里是我的json文件

{
  "partitions": [
    {
      "replicas": [
        0,
        1,
        2
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "replicas": [
        2,
        0,
        1
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
[...]

我希望,对于分区[]中的每个对象,通过将log_dirs[]中的第I个字符串的值与副本[]中的第I个数字连接起来,来替换第I个字符串的值,以便获得类似的结果

{
  "partitions": [
    {
      "replicas": [
        0,
        1,
        2
      ],
      "log_dirs": [
        "any0",
        "any1",
        "any2"
      ]
    },
    {
      "replicas": [
        2,
        0,
        1
      ],
      "log_dirs": [
        "any2",
        "any0",
        "any1"
      ]
    },
[...]

推荐答案

使用reduce循环和range循环

.partitions[] |= reduce range(0; ( .replicas | length ) ) as $r 
  ( . ; .log_dirs[$r] += ( .replicas[$r] | tostring ) )

reduce表达式的工作原理是在整个log_dirs数组上迭代,直到replicas列表的长度,并通过在replicas[$r]处添加相应的值来修改每个条目.log_dirs[$r](这里r从0到replicas的长度).由于replicas包含数字,因此需要将其转换为字符串以进行追加操作.

jqplay - demo

Json相关问答推荐

2020-12年草案中的Json列举模式

筛选JSON数组以使用Jolt仅保留具有最新日期/时间的条目

删除JSON文件的特定内容

集成wix.comstore API|变音符号问题

使用快速json库编写json可以消除所有缩进

使用 jq 重新格式化 JSON 输出

JOLT JSON 将值从一对多转换为一对一

在 rust 中从 API 反序列化 serde_json

在PowerShell中按时间戳过滤JSON

如何使用 Swiftui 判断 JSON 是否缺少键值对

如何在不解析的情况下在javascript中同步包含JSON数据?

按 JSON 数据类型 postgres 排序

Jackson 中的 readValue 和 readTree:何时使用哪个?

JSON.stringify 不会转义?

关于使用 $ref 的 JSON 模式

未调用 npm package.json 脚本

通过 JSON 发送 64 位值的公认方式是什么?

如何从 MySQL 中检索 JSON 数据?

TypeError:使用Python解析JSON时字符串索引必须是整数?

将 JSON 数据从 php 传递给 html-data 属性,然后传递给 Javascript