☠ Как анализировать и вывести JSON с помощью инструментов командной строки Linux

by itisgood

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

Слово JSON означает JavaScript Object Notation, хотя оно начинается с JavaScript и в основном используется для обмена данными между сервером и браузером, но в настоящее время используется во многих областях, включая встроенные системы.

Здесь мы собираемся проанализировать и вывести JSON с помощью инструментов командной строки в Linux.

Это чрезвычайно полезно для обработки больших данных JSON в скриптах оболочки или для управления данными JSON в скриптах оболочки.

Что такое красивый вывод json?

Данные JSON структурированы так, чтобы быть более удобочитаемыми для человека.

Однако в большинстве случаев данные JSON хранятся в одной строке, даже без символа окончания строки.

Очевидно, что это не очень удобно для чтения и редактирования вручную.

Вот тогда красивый вывод полезен.

Название самоочевидно, переформатировать текст JSON, чтобы он было более читабельным для людей.

Данные JSON можно анализировать с помощью текстовых процессоров командной строки, таких как awk, sed и gerp.

На самом деле JSON.awk – это скрипт awk для этих целей.

Однако для этой цели есть несколько специализированных инструментов.

  • jq или jshon, JSON-парсер для оболочки, оба они весьма полезны.
  • Скрипты оболочки, такие как JSON.sh или jsonv.sh, для анализа JSON в оболочке bash, zsh или dash.
  • JSON.awk, JSON-анализатор, awk-скрипт.
  • Модули Python, такие как json.tool.
  • underscore-cli, Node.js и на основе JavaScript.

В этом уроке я сосредоточусь только на jq, довольно мощном парсере JSON для оболочек с расширенными возможностями фильтрации и скриптов.

JSON понятный вывод

Данные JSON могут быть едины и почти неразборчивы для людей, поэтому, чтобы сделать их несколько читабельными, есть удобный вывод JSON.

Пример: данные с jsonip.com, чтобы получить внешний IP-адрес в формате JSON, используйте инструменты curl или wget, как показано ниже.

$ wget -cq http://jsonip.com/ -O -

Фактические данные выглядят так:

{"ip":"111.222.333.444","about":"/about","Pro!":"http://getjsonip.com"}

Теперь выведем его с помощью JQ:

$ wget -cq http://jsonip.com/ -O - | jq '.'

Вывод должен выглядеть как показано ниже после фильтрации результата с помощью jq.

{

   "ip": "111.222.333.444",

   "about": "/about",

   "Pro!": "http://getjsonip.com"

}

То же самое можно сделать с модулем Python json.tool. Вот пример:

$ cat anything.json | python -m json.tool

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

Однако модуль Python json.tool имеет явное преимущество – это кроссплатформенность.

Таким образом, вы можете использовать его без проблем в Windows, Linux или Mac OS.

Как парсить JSON с jq

Во-первых, вам нужно установить jq, он уже подхвачен большинством дистрибутивов GNU / Linux, и вы можете установить его с помощью соответствующих команд установщика пакетов.

На Arch Linux:

$ sudo pacman -S jq

На Debian, Ubuntu, Linux Mint:

$ sudo apt-get install jq

На Fedora:

$ sudo dnf install jq

На openSUSE:

$ sudo zypper install jq

Для других ОС или платформ смотрите официальные инструкции по установке.

Основные фильтры и идентификаторы jq

jq может читать данные JSON либо из стандартного ввода, либо из файла.

Вы должны использовать оба в зависимости от ситуации.

Единый символ это самый простой фильтр.

Эти фильтры также называются object identifier-index.

Одинарные кавычки – вам не обязательно использовать одинарные кавычки всегда. Но если вы объединяете несколько фильтров в одну строку, то вы должны их использовать.

Двойные кавычки – Вы должны заключать любые специальные символы, такие как @, #, $, в две двойные кавычки, как в этом примере, jq .foo. ”@Bar”

Вывод необработанных данных – по любой причине, если вам нужны только окончательные проанализированные данные, не заключенные в двойные кавычки, используйте флаг -r с командой jq, например так. – jq -r .foo.bar.

Чтобы отфильтровать определенную часть JSON, вы должны изучить иерархию данных файла JSON.

Пример данных JSON из Википедии:

{

  "firstName": "John",

  "lastName": "Smith",

  "age": 25,

  "address": {

    "streetAddress": "21 2nd Street",

    "city": "New York",

    "state": "NY",

    "postalCode": "10021"

},

  "phoneNumber": [

{

  "type": "home",

  "number": "212 555-1234"

},

{

  "type": "fax",

  "number": "646 555-4567"

}

],

  "gender": {

  "type": "male"

  }

}

Я собираюсь использовать эти данные JSON в качестве примера в этом учебном пособии, сохранив их как sample.json.

Допустим, я хочу отфильтровать адрес из файла sample.json. Таким образом, команда должна быть такой:

$ jq .address sample.json

Пример вывода:

{

  "streetAddress": "21 2nd Street",

  "city": "New York",

  "state": "NY",

  "postalCode": "10021"

}

Снова допустим, что я хочу почтовый индекс, затем я добавлю еще один object identifier-index, то есть еще один фильтр.

$ cat sample.json | jq .address.postalCode

 

You may also like

Leave a Comment