我的输入json文件:

{ "london": [ "x", 0 ] }
{ "london": [ "y", 97 ] }
{ "paris": [ "x", 15 ] }
{ "paris": [ "y", 8 ] }

我try 按键分组并输出:

{ "london":  ["x", 0], ["y", 97] },
{ "paris":   ["x", 15], ["y", 8] }

或者:

{ "london": [ {"x", 0}, {"y", 97} ] },
{ "paris":  [ {"x", 15}, {"y", 8} ] }

以下命令会给出一条错误消息:

 jq -s 'group_by(keys_unsorted[0]) | map({(.[0]): map(.[1])})'

jq:error(at:4):无法用数字索引对象

我试着把数字改成字符串,但无济于事. 我想我在 map 上漏掉了一些东西

编辑:

关于@pmf的回答的详细说明. 原始来源为:

 {
   "city": "london",
   "zoo": [
     { "room": { "name": "x" }, "gpu": { "id": "fish",  "sum": 0 } },
     { "room": { "name": "y" }, "gpu": { "id": "zebra", "sum": 97 } }
    ]
  }
  {
    "city": "paris",
    "zoo": [
       { "room": { "name": "x" }, "gpu": { "id": "fish",  "sum": 15 } },
       { "room": { "name": "y" }, "gpu": { "id": "zebra", "sum": 8 } }
    ]
  }

我试着获得如上的输出.我从以下几个方面开始:

      jq -c '.city as $j | foreach .zoo[] as $i (.; .; {($j): [$i.room.name, $i.gpu.sum]})'

然后我坚持了下来,@PMF帮助了我.我还能做别的吗?

推荐答案

您的预期输出不是有效的JSON(要么缺少数组括号,要么包含大量逗号).两个键中的第一个甚至将多个值列出到单个对象键,这是不可能的(除非值包含在数组括号中).以下是如何开始从流中收集数据:

jq -n 'reduce (inputs | to_entries)[] as $e ({}; .[$e.key] += [$e.value])'
{
  "london": [
    [
      "x",
      0
    ],
    [
      "y",
      97
    ]
  ],
  "paris": [
    [
      "x",
      15
    ],
    [
      "y",
      8
    ]
  ]
}

Demo

从这里开始,决定您的(有效)目标 struct 应该是什么样子,如果需要,在此基础上提出另一个问题.


编辑:您使用group_by的方法依赖于这样一个前提,即每个输入对象只包含一个键.如果您想采用这种方法,请使用组的第一个键中的每个键创建对象:

jq -sc 'group_by(keys_unsorted[])[] | {(.[0] | keys_unsorted[]): [.[][]]}'
{"london":[["x",0],["y",97]]}
{"paris":[["x",15],["y",8]]}

Demo

Json相关问答推荐

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

如何在使用GO时检测JSON中不需要的字段?

删除JSON文件的特定内容

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

Vega-Lite(Deneb):难以将最小和最大值应用于折线图和文本标签以及线条末尾的点

将JSON行转换为TSV格式, for each 数组项生成单独的行

jq EOF 处的无效数字文字将 json 值更新为 0.0.x

将哈希表转换为 json 后,Powershell 缺少数组

如何在生产环境中更改 Flutter 应用程序中的数据模型?

当值包含ansible中的字符串时解析json值

Jolt - 在同一级别添加时组合值的问题

如何一次加载无限滚动中的所有条目以解析python中的HTML

Python Flask-Restful POST 不采用 JSON 参数

使用 c# 通用地展平 Json

验证和格式化 JSON 文件

Jackson 动态属性名称

Jackson:忽略 Json 配置值

Peewee 模型转 JSON

MySQL Select JSON 字段属性具有值的位置

使用新的 Net Core 3.0 Json 时忽略属性