如何使用JQ高效地对JSON对象进行排序

3

我有一个JSON格式的数据

{
  "a": {
    "size":3
  },
  "b": {
    "size":2
  },
  "c": {
    "size":1
  }
}

我需要按大小排序,例如:
{
  "c": {
    "size": 1
  },
  "b": {
    "size": 2
  },
  "a": {
    "size": 3
  }
}

我已经找到了一种方法来完成它,例如:
. as $in | keys_unsorted | map ({"key": ., "size" : $in[.].size}) | sort_by(.size) | map(.key | {(.) : $in[.]}) | add

但是这似乎相当复杂,所以我希望有一个我忽视的更简单的方法?

1个回答

4
您可以使用to_entries / from_entries,用法如下:
jq 'to_entries|sort_by(.value.size)|from_entries' file.json

to_entries会将您的输入对象转换为一系列key/value对对象:

[
  {
    "key": "a",
    "value": {
      "size": 3
    }
  },
  ...
  {
    "key": "c",
    "value": {
      "size": 1
    }
  }
]

这可以通过应用sort_by(.value.size)到该列表,然后使用from_entries将其转换回对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接