我有一个json文件,格式如下

{
  "hello": [
    {
      "name": "var1",
      "value": "1234"
    },
    {
      "name": "var2",
      "value": "2356"
    },
    {
      "name": "var3",
      "value": "2356"
    }
  ],
  "hi": [
    {
      "name": "var1",
      "value": "3412"
    },
    {
      "name": "var2",
      "value": "2563"
    },
    {
      "name": "var3",
      "value": "4256"
    }
  ],
  "bye": [
    {
      "name": "var1",
      "value": "1294"
    },
    {
      "name": "var2",
      "value": "8356"
    },
    {
      "name": "var3",
      "value": "5356"
    }
  ]
}

我想将此对象转换为此格式

{
  "output": [
    {
      "var1": {
        "hello": "1234",
        "hi": "3412",
        "bye": "1294"
      }
    },
    {
      "var2": {
        "hello": "2356",
        "hi": "2563",
        "bye": "8356"
      }
    },
    {
      "var3": {
        "hello": "2356",
        "hi": "4256",
        "bye": "5356"
      }
    }
  ]
}

到目前为止,我已经try 了多种方法,在JQ中使用TO_ENTRIES和MAP函数来创建输出变量中的内容 这是我离解决方案最近的一次

  • 提取关键字并添加到对象的关键字值对
  • 使用map(select())按关键点分组 但我在这两个步骤中都遇到了错误,例如无法使用字符串名或字符串值索引array.

推荐答案

它不会赢得选美比赛,但它很管用:

with_entries(.value |= from_entries)
| with_entries(.key as $key | .value[] |= {($key):.})
| reduce .[] as $item ({}; . * $item)
| {output: to_entries | map({(.key):.value})}

只需拨打with_entries即可:

with_entries(.key as $key | .value |= (from_entries | map_values({($key):.})))
| reduce .[] as $item ({}; . * $item)
| {output: to_entries | map({(.key):.value})}

输出:

{
  "output": [
    {
      "var1": {
        "hello": "1234",
        "hi": "3412",
        "bye": "1294"
      }
    },
    {
      "var2": {
        "hello": "2356",
        "hi": "2563",
        "bye": "8356"
      }
    },
    {
      "var3": {
        "hello": "2356",
        "hi": "4256",
        "bye": "5356"
      }
    }
  ]
}

Json相关问答推荐

使用JSONata将具有相同键的字典合并

使用Powershell脚本将配置信息块添加到json文件

如何获取brew list作为JSON输出

从先前的REST调用创建动态JSON主体

盒子图显示不正确

使用自定义类型在Golang中解析JSON数组

如何用JQ打印JSON文件的路径和键值

bash用jq获取第二条JSON记录

当 JSON 字段名称有空格时,ABAP 中的 JSON 反序列化

如何对未知/变量键的字典进行编码?

JOLT 转换仅过滤一个字段

如何将复杂的 JSON 反序列化为 Rust 类型?

JSON 模式实际用于什么目的?

N1QL 聚合查询 Couchbase

如何使用法语口音对数组进行 json_encode?

Angularjs访问本地json文件

Golang struct 的 XML 和 JSON 标签?

如何在 Java 中将 YAML 转换为 JSON?

ASP.NET Web API JSON 输出中没有时间的日期

如何对 Javascript 对象进行排序,或将其转换为数组?