Команда JQ для получения только заголовков

Вопрос или проблема

У меня есть такой json файл:

"[{\"id\":188457,\"title\":\"Кружка для чая с крышкой «Росписный Дракон»\",\"slug\":\"painted-dragon-tea-mug-with-lid\",\"image\":\"https:\\\/\\\/thievemedia.imgix.net\\\/2018\\\/09\\\/painted-dragon-tea-mug-with-lid-featured-1.jpg\",\"full_image_url\":\"https:\\\/\\\/s3.amazonaws.com\\\/thieve-media\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/painted-dragon-tea-mug-with-lid-featured-1.jpg\",\"large_image_url\":\"https:\\\/\\\/s3.amazonaws.com\\\/thieve-media\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/painted-dragon-tea-mug-with-lid-featured-1.jpg\",\"medium_image_url\":\"https:\\\/\\\/s3.amazonaws.com\\\/thieve-media\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/painted-dragon-tea-mug-with-lid-featured-1.jpg\",\"original_price\":\"19.78\",\"price\":\"13.65\",\"discount\":\"30.99\",\"rating\":\"4.7\",\"total_orders\":\"10\",\"promotion_url\":\"https:\\\/\\\/api.thieve.co\\\/view?id=MzI4NTk0Njg0MDE=\",\"product_like_count\":\"100\",\"product_user_likes\"}]

Как я могу извлечь только названия с помощью jq?

Запрос '.[] | {title}' даст вам только элементы заголовков (но имейте в виду, что ваш пример документа, похоже, имеет ошибки), предполагая, что ваш документ находится в файле с именем data.json:

$ jq '.[] | {title}' data.json
{
    "title": "Кружка для чая с крышкой «Росписный Дракон»"
}

Первая часть запроса, '.[]', возвращает каждый объект из массива верхнего уровня, и они затем передаются во вторую часть, используя оператор |. Вторая часть запроса, {title}, просто извлекает элемент “title” из объекта.

Если вы хотите только заголовок как строку, без обертывания результатов в JSON объект, используйте это вместо:

$ jq '.[] | .["title"]' data.json
"Кружка для чая с крышкой «Росписный Дракон»"

Учебник jq предлагает хороший обзор языка запросов.

Предполагая, что входные данные – это JSON строка, кодирующая фактический JSON документ, вы можете использовать jq для декодирования строки в JSON, а затем извлечь значение ключа title из каждого из элементов верхнего уровня массива:

jq -r 'fromjson[].title' file

.

Ответ или решение

Чтобы извлечь только заголовки из вашего JSON-файла с помощью команды jq, важно правильно обработать данные, так как они представлены в виде закодированного JSON. Давайте подробно рассмотрим процесс и необходимые команды.

Проблема и подготовка

Исходные данные: Вы предоставили строку, содержащую закодированный JSON, которая описывает продукт и включает его title, id и другие атрибуты.

"[{\"id\":188457,\"title\":\"Painted Dragon Tea Mug with Lid\",\"slug\":\"painted-dragon-tea-mug-with-lid\"...}]"

Обратите внимание, что изначально это не стандартный JSON, а строка. Поэтому первым шагом будет декодирование этой строки в JSON-формат.

Использование команды jq

Чтобы извлечь только заголовки, вам необходимо использовать следующую команду jq:

jq -r 'fromjson | .[].title' файл.json

Объяснение команды

  1. jq: это утилита для обработки JSON.

  2. -r: флаг, который указывает jq выводить необработанный текст (без кавычек), что удобно, если вам нужны чистые строки.

  3. fromjson: данная функция используется для декодирования строки JSON в валидный JSON-объект. Это особенно важно в вашем случае, так как ваши данные изначально представлены в виде строки JSON.

  4. |: оператор передачи, который позволяет передавать результаты одной команды в другую.

  5. .[].title: здесь . указывает на корень JSON-объекта, а [] извлекает каждый элемент массива, а затем .title выбирает значение ключа title, связанное с каждым объектом.

Пример

Если ваш JSON-файл назван data.json, вы можете использовать следующую команду в терминале:

echo "[{\"id\":188457,\"title\":\"Painted Dragon Tea Mug with Lid\",\"slug\":\"painted-dragon-tea-mug-with-lid\"}]" | jq -r 'fromjson | .[].title'

Вывод

После выполнения команды вы получите:

Painted Dragon Tea Mug with Lid

Таким образом, с помощью команды jq вы эффективно извлекаете заголовки из вашего JSON-документа, даже если данные представлены в виде закодированной строки. Это демонстрирует мощность и гибкость jq для работы с JSON в различных форматах.

Оцените материал
Добавить комментарий

Капча загружается...