[Программирование, DevOps] Утилиты для обработки JSON (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Независимо от того, взаимодействуете ли вы с API или делаете запрос в базу данных, вы, вероятно, получите данные в формате JSON. Большинство популярных языков программирования имеют встроенные возможности для обработки и анализа JSON. Однако не всё так просто, если вы работаете с данными в Bash.По умолчанию оболочки, такие как Bash, не имеют стандартного парсера JSON. Необходимо либо использовать интерпретатор языка программирования, либо установить соответствующую утилиту. Если вы хотите ограничиться возможностями командной строки, то установка утилиты, вероятно, будет самым простым вариантом. Вам не придется настраивать интерпретатор и устанавливать дополнительные зависимости.Большинство специализированных утилит для работы с JSON также работают очень быстро, занимают мало места и не нуждаются в каких-либо дополнительных зависимостях.В этой статье мы рассмотрим некоторые популярные утилиты, которые добавляют эту важную функцию в вашу оболочку командной строки. Это также позволит обрабатывать данные JSON в скриптах.jqhttps://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 достаточно велик. Ознакомьтесь с руководством, чтобы узнать, как выжать максимум из этой замечательной утилиты.johttps://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_pphttps://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.jshonhttp://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
===========
Источник:
habr.com
===========
===========
Автор оригинала: Tate Galbraith
===========Похожие новости:
- [Программирование, Java] Java 15 и IntelliJ IDEA (перевод)
- [Программирование, Геоинформационные сервисы, Математика, Визуализация данных, Научно-популярное] Построение достоверных геологических моделей
- [Open source, Программирование, API, Apache, Natural Language Processing] Как добавить Natural Language Processing в Minecraft
- [Беспроводные технологии, Программирование микроконтроллеров, Умный дом, Интернет вещей, DIY или Сделай сам] Hello NXP JN5169 Zigbee World: правильное подключение и переподключение устройств
- [DevOps] Почему сертификация важна, как подготовиться и сдать экзамены AWS, Azure, GCP, etc…
- [Интерфейсы, Usability, Научно-популярное] Переосмысляем «настольный компьютер» как концепцию (перевод)
- [Тестирование IT-систем, Анализ и проектирование систем, Управление разработкой, Софт, Визуальное программирование] RPA инструменты и не только…
- [Настройка Linux, Программирование микроконтроллеров] Собираем и устанавливаем свою Linux-систему на микроконтроллер STM32MP1
- [DevOps, Kubernetes] Как увеличить скорость реакции Kubernetes на отказ узлов кластера? (перевод)
- [Программирование, Анализ и проектирование систем, Проектирование и рефакторинг, IT-стандарты] Хватит организовывать код по типу файлов (перевод)
Теги для поиска: #_programmirovanie (Программирование), #_devops, #_json, #_devops, #_devtools, #_development, #_programmirovanie (программирование), #_utility (утилиты), #_blog_kompanii_timeweb (
Блог компании Timeweb
), #_programmirovanie (
Программирование
), #_devops
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:41
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Независимо от того, взаимодействуете ли вы с API или делаете запрос в базу данных, вы, вероятно, получите данные в формате JSON. Большинство популярных языков программирования имеют встроенные возможности для обработки и анализа JSON. Однако не всё так просто, если вы работаете с данными в Bash.По умолчанию оболочки, такие как Bash, не имеют стандартного парсера JSON. Необходимо либо использовать интерпретатор языка программирования, либо установить соответствующую утилиту. Если вы хотите ограничиться возможностями командной строки, то установка утилиты, вероятно, будет самым простым вариантом. Вам не придется настраивать интерпретатор и устанавливать дополнительные зависимости.Большинство специализированных утилит для работы с JSON также работают очень быстро, занимают мало места и не нуждаются в каких-либо дополнительных зависимостях.В этой статье мы рассмотрим некоторые популярные утилиты, которые добавляют эту важную функцию в вашу оболочку командной строки. Это также позволит обрабатывать данные JSON в скриптах.jqhttps://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"}} $ curl --silent https://randomuser.me/api | jq '.results[0] .name'
{ "title": "Miss", "first": "Charline", "last": "Legrand" } $ curl --silent https://randomuser.me/api | \
jq '.results[0] | {fullname: (.name.first + " " + .name.last)}' { "fullname": "Charline Legrand" } $ jo name=bob creation_date="$(date +%m-%d-%y)"
{"name":"bob","creation_date":"02-23-21"} $ jo -p arr=$(jo -a one two three four five six)
{ "arr": [ "one", "two", "three", "four", "five", "six" ] } $ 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", ... $ echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jshon -k
key1 key2 key3 $ echo '{"key1":"value1","key2":"value2","key3":"value3"}' | jq keys
[ "key1", "key2", "key3" ] $ 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 =========== Источник: habr.com =========== =========== Автор оригинала: Tate Galbraith ===========Похожие новости:
Блог компании Timeweb ), #_programmirovanie ( Программирование ), #_devops |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:41
Часовой пояс: UTC + 5