Утилиты для обработки JSON

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Независимо от того, взаимодействуете ли вы с API или делаете запрос в базу данных, вы, вероятно, получите данные в формате JSON. Большинство популярных языков программирования имеют встроенные возможности для обработки и анализа JSON. Однако не всё так просто, если вы работаете с данными в Bash.

По умолчанию оболочки, такие как Bash, не имеют стандартного парсера JSON. Необходимо либо использовать интерпретатор языка программирования, либо установить соответствующую утилиту. Если вы хотите ограничиться возможностями командной строки, то установка утилиты, вероятно, будет самым простым вариантом. Вам не придется настраивать интерпретатор и устанавливать дополнительные зависимости.

Большинство специализированных утилит для работы с JSON также работают очень быстро, занимают мало места и не нуждаются в каких-либо дополнительных зависимостях.

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

jq

https://stedolan.github.io/jq/

Без сомнения, это одна из самых популярных утилит для работы с JSON, которая в основном используется для фильтрации и обработки входящих данных JSON. Особенно она полезна, если вы работаете со скриптами, которые взаимодействуют с API. Утилита небольшая и очень быстрая.

Запрос к API без использования jq вернёт необработанные данные в формате JSON:

$ curl --silent https://randomuser.me/api

{"results":[{"gender":"female","name":{"title":"Mrs","first":"Alice","last":
"Williams"},"location":{"street":{"number":3138,"name":"Parliament St"},"city":
"Elgin","state":"Newfoundland and Labrador","country":"Canada","postcode":
"E3P 6W1","coordinates":{"latitude":"-64.8528","longitude":"132.5197"},"timezone":
{"offset":"-12:00","description":"Eniwetok, Kwajalein"}},"email":
"alice.williams@example.com","login":{"uuid":"0fa05a45-68c5-458e-8949-a902909c0366","username":
"organicmouse652","password":"desert","salt":"FWwxI4cL","md5":
"2ac513eba7e262d9a4a337f7612f1ccd","sha1":"3be657547a30a48baa880157870c611471fa5f64","sha256":
"b9624ef417a792266c38901d7d60b3333ea0b500bd92765e3a231b5ad72f6559"},"dob":
{"date":"1947-01-20T09:49:10.987Z","age":74},"registered":{"date":"2004-09-26T02:
43:22.681Z","age":17},"phone":"057-014-3165","cell":"950-360-9030","id":{"name":
"","value":null},"picture":{"large":"https://randomuser.me/api/portraits/women/59.jpg","medium":
"https://randomuser.me/api/portraits/med/women/59.jpg","thumbnail":
"https://randomuser.me/api/portraits/thumb/women/59.jpg"},"nat":"CA"}],"info":
{"seed":"a86aaf53eb0eae8c","results":1,"page":1,"version":"1.3"}}

Когда вы передаете вывод в jq, то можете начать сразу выполнять к нему простые запросы. Если вы просто перенаправите вывод в jq, он выведет его в консоль в формате, удобном для чтения.

Предположим, что все, что нам нужно, — это случайное имя из API. Этот фильтр возвращает нам первый элемент массива, а затем получает из него ключ name. Результат будет примерно следующий:

$ curl --silent https://randomuser.me/api | jq '.results[0] .name'

{
  "title": "Miss",
  "first": "Charline",
  "last": "Legrand"
}

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

Однако функциональность jq не ограничивается простыми фильтрами. Допустим, мы хотим создать совершенно новый ключ с именем fullname, который будет содержать одновременно имя и фамилию. С jq это сделать совсем несложно:

$ curl --silent https://randomuser.me/api | \
jq '.results[0] | {fullname: (.name.first + " " + .name.last)}'

{
  "fullname": "Charline Legrand"
}

Вы можете объединять jq-фильтры вместе так же, как вы объединяете команды в оболочке.

Список возможностей jq достаточно велик. Ознакомьтесь с руководством, чтобы узнать, как выжать максимум из этой замечательной утилиты.

jo

https://github.com/jpmens/jo

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

$ jo name=bob creation_date="$(date +%m-%d-%y)"

{"name":"bob","creation_date":"02-23-21"}

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

Мы также можем печатать большие блоки данных, используя параметр -p с jo. Давайте посмотрим, как это будет выглядеть, когда мы создадим массив данных:

$ jo -p arr=$(jo -a one two three four five six)

{
   "arr": [
      "one",
      "two",
      "three",
      "four",
      "five",
      "six"
   ]
}

Подробнее о работе с jo и о некоторых из ее действительно интересных возможностях, читайте в статье:

https://jpmens.net/2016/03/05/a-shell-command-to-create-json-jo/

json_pp

https://github.com/deftek/json_pp

Это простая утилита, которая позволяет отображать большие двоичные объекты JSON в более удобном формате, а также конвертировать их между разными форматами. Утилита json_pp аккуратно отформатирует JSON с правильным интервалом и отступом, чтобы вы могли быстрее находить нужную информацию:

$ curl --silent https://randomuser.me/api | json_pp

{
   "info" : {
      "page" : 1,
      "results" : 1,
      "seed" : "83b8f82090d14bfb",
      "version" : "1.3"
   },
   "results" : [
      {
         "cell" : "076 515 26 35",
         "dob" : {
            "age" : 28,
            "date" : "1993-03-05T14:37:55.246Z"
         },
         "email" : "annelise.durand@example.com",
...

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

jshon

http://kmkeen.com/jshon/

Еще один чрезвычайно удобный парсер JSON — это jshon. Эта программа имеет функциональность, аналогичную jq, и существует уже довольно давно. Есть фильтры, похожие на jq, а также удобные встроенные функции. Некоторые из основных функций отлично подходят для быстрого анализа больших объемов данных. Давайте посмотрим, как мы получим все ключевые имена из объекта:

$ echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jshon -k

key1
key2
key3

Кроме того, вы можете получить ключи с помощью jq, но результатом будет фактический объект массива, например:

$ echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jq keys
[
  "key1",
  "key2",
  "key3"
]

Если вам нужен необработанный ключ, вы можете просто использовать jshon. Вдобавок к этому, jshon очень быстрый, он работает более чем в 7 раз быстрее jq::

$ time echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jshon -k

key1
key2
key3
real 0m0.005s
user 0m0.002s
sys 0m0.004s

$ time echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jq keys

[
  "key1",
  "key2",
  "key3"
]
real 0m0.039s
user 0m0.035s
sys 0m0.005s
Источник: https://habr.com/ru/company/timeweb/blog/561214/


Интересные статьи

Интересные статьи

Стандартный формат сериализации данных в ASP.NET Core Web API - это Camel Case. Но иногда может возникнуть необходимость изменить формат. Казалось бы, нетрудно изменить стратегию сериализ...
Доброго времени суток, друзья! В этой небольшой заметке я хочу рассказать вам о некоторых редко используемых возможностях JSON.stringify(). Возможно, они окажутся вам полезными. JSON....
Много всякого сыпется в мой ящик, в том числе и от Битрикса (справедливости ради стоит отметить, что я когда-то регистрировался на их сайте). Но вот мне надоели эти письма и я решил отписатьс...
В Челябинске проходят митапы системных администраторов Sysadminka, и на последнем из них я делал доклад о нашем решении для работы приложений на 1С-Битрикс в Kubernetes. Битрикс, Kubernetes, Сep...
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...