如何使用表的键名进行分组

问题描述 投票:0回答:1

我输入的json文件:

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

我尝试按键分组并输出:

{ "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:错误(位于:4):无法用数字索引对象

我尝试将数字更改为字符串,但是没有帮助。 我想我错过了地图上的一些东西(?)

json jq edit
1个回答
0
投票

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

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

演示

从这里开始,决定你的(有效)目标结构应该是什么样子,如果需要,可以据此提出另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.