Как эффективно сортировать объект JSON с помощью JQ? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть JSON в формате

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

Мне нужно отсортировать по размеру, например ::1004 *

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

Я нашел способ сделать это, например ::1007 *

. as $in | keys_unsorted | map ({"key": ., "size" : $in[.].size}) | sort_by(.size) | map(.key | {(.) : $in[.]}) | add

но это кажется довольно сложным, так что я надеюсь, что есть более простой способ, который я упустил?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете использовать 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.

...