Задать вопрос
@Hanry654

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

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

Тобишь page=1 - отображается первая десятка
page=2 - отображается вторая десятка и т.д
  • Вопрос задан
  • 332 просмотра
Подписаться 2 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Skillbox
    PHP-разработчик. Базовый уровень
    3 месяца
    Далее
Решения вопроса 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/.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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