JSON字段具有相同的名称

eco*_*con 4 json key duplicates on-duplicate-key jq

实际上,键必须在JSON对象中是唯一的(例如,JSON语法是否允许对象中的重复键?).但是,假设我有一个包含以下内容的文件:

{
    "a" : "1",
    "b" : "2",
    "a" : "3"
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法将重复键转换为数组?这样文件就变成了:

{
    "a" : [ {"key": "1"}, {"key": "3"}],
    "b" : "2"
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西,但它将重复的键组合成一个数组(或查找和替代方法来提取重复的键值).

这是Java中的解决方案:将带有重复键的JSON对象转换为JSON数组

有没有办法用awk/bash/python做到这一点?

小智 6

如果您的输入实际上是一个平面JSON对象,其基元为值,则应该可以:

jq -s --stream 'group_by(.[0]) | map({"key": .[0][0][0], "value": map(.[1])}) | from_entries'

{
  "a": [
    "1",
    "3"
  ],
  "b": [
    "2"
  ]
}
Run Code Online (Sandbox Code Playgroud)

对于更复杂的输出,这需要实际了解--stream应该如何使用,这超出了我的范围.