Люди, которые работают с данными, как и вы, иногда сталкиваются с json-подобными файлами. При работе на удаленном сервере люди часто используют интерфейс командной строки (CLI). Иногда они управляют файлами JSON. С помощью основных команд, таких как «cut» или «sed», просматривать файлы JSON сложно. К счастью, JQ существует и является идеальным инструментом для управления файлами JSON с помощью CLI.

Я нахожу документацию JQ непростой для чтения и немного многословной. Кроме того, приведенные примеры не всегда очень интересны, а иногда и сложнее, чем нужно. В этом посте вы найдете все примеры, необходимые для простого и быстрого использования JQ в целях машинного обучения.

Скачайте и установите JQ.

Прежде чем что-либо делать, вам нужно установить JQ на свой компьютер. Ниже вы найдете командные строки для установки JQ в Linux и Mac OS.

Линукс:

sudo apt-get install jq

Mac ОС:

 brew install jq

Для Windows или для получения дополнительных сведений об установке вам может помочь следующая веб-страница: https://stedolan.github.io/jq/download/

Скачать пример набора данных в JSON

Прежде чем что-то делать, вам нужны данные для работы. Загрузите следующий файл json и сохраните его как test.json где-нибудь на своем компьютере. Если вы предпочитаете, вы можете использовать свой собственный json, но вам нужно будет адаптировать наши команды к вашим данным.

Базовая структура командной строки JQ

Пользоваться JQ очень просто. Команды ждут два аргумента. Файл json, который является входным файлом, который вы предоставляете системе, и команда, описывающая, что делать с файлом.

jq [command] [json file]

Показать весь файл в виде структуры

Самая простая команда для JQ — отобразить всю структуру json в виде дерева. Для этого вы можете использовать следующую командную строку:

jq '.[]' test.json

Точка (.) — это самый простой фильтр с именем entity. Эта точка необходима для того, чтобы указать программе, что вы хотите обрабатывать данные целиком. Затем квадратные скобки ([]) используются для поиска полей объекта. Используя пустые квадратные скобки, как указано выше, вы указываете, что хотите обработать все объекты. На рис. 1 показаны несколько строк результата выполнения команды.

Если вы хотите выбрать один конкретный объект, вы можете указать, какой из них вас интересует, добавив его ключ в скобки. Попробуйте это с помощью следующей командной строки:

jq '.["Costco_Front_Image_0013.jpg193064"]' test.json

Таким образом, вы увидите только значение объекта с ключом Costco_Front_Image_0013.jpg193064, как показано на рисунке 2.

Выберите конкретное поле вашего текущего объекта

После выбора объекта вашей целью может быть просто выбор одного из его полей. Вы можете сделать это, используя точку (.) и имя вашего поля. Вы можете попробовать, например, выбрать поле «регионы» следующим образом:

jq '.["Costco_Front_Image_0013.jpg193064"].regions' test.json

Вы также можете получить доступ к полю «регионы», используя скобки вместо точки.

jq '.["Costco_Front_Image_0013.jpg193064"]["regions"]' test.json

На рис. 3 показан результат для двух предыдущих команд.

Это работает, даже если вы хотите получить значение области всех индексов, указав пустые квадратные скобки.

jq '.[].regions' test.json

Комбинируйте JQ со стандартными командами

JQ является мощным, потому что вы можете использовать его с интерфейсом командной строки и, таким образом, комбинировать его со стандартными командами, такими как grep. Ниже мы сосредоточимся на Linux и Mac, поскольку лично я не использую оболочки Windows.

Возьмем пример. Представьте, что вы хотите знать все модальности класса для regions.region_attribute. Вы можете перечислить их, используя следующую команду:

jq '.["Costco_Front_Image_0013.jpg193064"]["regions"][]["region_attributes"]["class"]' test.json 

Как показано на рисунке 4, модальности перечислены, но их трудно идентифицировать, так как они появляются несколько раз, например. «lane_marking» появляется несколько раз.

Если вы комбинируете JQ с такими командами, как uniq и sort, вы можете легко перечислить каждую модальность только один раз.

jq '.[]["regions"][]["region_attributes"]["class"]' test.json | sort | uniq

Рисунок 5 является результатом предыдущей команды и показывает, что в test.json есть только две модальности: «driveable_area» и «lane_marking».

Конечно, вы можете использовать другие команды, такие как grep для поиска информации об определенном поле или xargs для запуска команды для каждого значения (например, автоматически создать два текстовых файла для модальностей «проезжая_зона» и «дорожная_маркировка»?). У вас нет лимита и вы используете команду linux

Заключение

В этом сообщении блога мы увидели, что JQ — это мощная командная строка, которая может помочь вам легко читать файлы json и может быть объединена со стандартными командами, такими как grep или uniq для получения дополнительной информации. мощь. Поскольку я считаю, что документацию JQ нелегко читать, я надеюсь, что эта запись в блоге поможет вам познакомиться с этим инструментом. Немного потренировавшись, он может стать вашим лучшим другом для чтения json-файлов в целях машинного обучения (или других целей).

Не стесняйтесь задавать вопросы или добавлять подробности в комментариях. 😊

Рекомендации

Для получения дополнительной информации о JQ:



Если были найдены данные по следующей средней статье: