【问题标题】:How can you sort a JSON object efficiently using JQ如何使用 JQ 有效地对 JSON 对象进行排序
【发布时间】:2018-10-11 15:27:30
【问题描述】:

我有 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

但这似乎很复杂,所以我希望有一个我忽略的更简单的方法?

【问题讨论】:

    标签: json sorting key jq


    【解决方案1】:

    你可以使用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 将其转换回对象。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2020-03-06
      • 2021-07-26
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多