@Hanry654

Как отсортировать json как на JSON placeholder?

Есть жсон файл на 70к строчек, возможно ли как то сделать как на https://jsonplaceholder.typicode.com/todos?_page=2

Тобишь page=1 - отображается первая десятка
page=2 - отображается вторая десятка и т.д
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Вам нужно сначала преобразовать свой файл (в котором, видимо на верхнем уровне список) в перечень вложенных в этот список json'ов:
jq -c ".[]"
Потом разбить на группы по N штук:
split -l 10 -d - my_chunk_prefix_
Получим файлы my_chunk_prefix_*, но в каждом из них не валидный json, a json-строки. Их нужно преобразовать к обычным josn'ам.
for f in my_chunk_prefix_*; do cat $f | sed '1s/^/[/; $!s/$/,/; $s/$/]/' | jq "" > $f.json ; rm $f ; done


Всё. На этом у вас есть пагинированный json-файл в виде статики.

Итак, ещё раз:
jq -c ".[]" my_big.json | split -l 10 -d - my_chunk_prefix_

for f in my_chunk_prefix_*; do cat $f | sed '1s/^/[/; $!s/$/,/; $s/$/]/' | jq "" > $f.json ; rm $f ; done

Так себе решение по читабельности, уверен, что сборку json из строк можно было сделать без sed на чистом jq, но читать мануал некогда.

Если разбиение надо делать динамически, то большой json я бы хранил в виде одного большого jsons (json lines), потом сделал бы шелл-скрипт с параметрами пагинации и в нём выбирал бы нужные N строк по модулю количества элементов на страницу и конвертил бы это в json на лету.

Вообще почитайте мануал по jq, не исключено, что там есть готовый способ сделать пагинацию за один простой шаг вместо всех этих танцев с башем.
Наглядно поупражняться с магией jq можно тут: https://jqplay.org/.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы