Хочу посоветовать простой и удобный сервис для тех, кто работает с json. Если не хочется ставить локально различные утилиты для json, например jq, то можно использовать онлайн сервис.
https://jsonlint.com/
Например, есть у вас вот такая колбаса в машиночитаемом формате:
{"result":{"chain":"main","blocks":1206936,"initial_block_download_complete":true,"headers":1206936,"bestblockhash":"0000000000bf1b4a488dc634abbc9f0868dd2f5cc5549f423210b8ec0d5637a7","difficulty":77902739.72413671,"verificationprogress":0.9999957873385094,"chainwork":"00000000000000000000000000000000000000000000000005bdbaed4c3860ce","pruned":false,"size_on_disk":29244718826,"estimatedheight":1206936,"commitments":1543822,"valuePools":[{"id":"sprout","monitored":true,"chainValue":30474.03751237,"chainValueZat":3047403751237},{"id":"sapling","monitored":true,"chainValue":578237.33269554,"chainValueZat":57823733269554}],"softforks":[{"id":"bip34","version":2,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip66","version":3,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip65","version":4,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}}],"upgrades":{"5ba81b19":{"name":"Overwinter","activationheight":347500,"status":"active","info":"See https://z.cash/upgrade/overwinter/ for details."},"76b809bb":{"name":"Sapling","activationheight":419200,"status":"active","info":"See https://z.cash/upgrade/sapling/ for details."},"2bb40e60":{"name":"Blossom","activationheight":653600,"status":"active","info":"See https://z.cash/upgrade/blossom/ for details."},"f5b9230b":{"name":"Heartwood","activationheight":903000,"status":"active","info":"See https://z.cash/upgrade/heartwood/ for details."},"e9ff75a6":{"name":"Canopy","activationheight":1046400,"status":"active","info":"See https://z.cash/upgrade/canopy/ for details."}},"consensus":{"chaintip":"e9ff75a6","nextblock":"e9ff75a6"}},"error":null,"id":"curltext"}
А вам надо понять, есть тут ошибки или нет, а так же желательно посмотреть все это в человекочитаемом формате. Сервис вам как раз поможет в этом. Отформатирует все и проверит не потерялась ли где скобка или запятая.
Если кто-то знает сервис удобнее и функциональнее, поделитесь ссылкой.
#сервис #json
https://jsonlint.com/
Например, есть у вас вот такая колбаса в машиночитаемом формате:
{"result":{"chain":"main","blocks":1206936,"initial_block_download_complete":true,"headers":1206936,"bestblockhash":"0000000000bf1b4a488dc634abbc9f0868dd2f5cc5549f423210b8ec0d5637a7","difficulty":77902739.72413671,"verificationprogress":0.9999957873385094,"chainwork":"00000000000000000000000000000000000000000000000005bdbaed4c3860ce","pruned":false,"size_on_disk":29244718826,"estimatedheight":1206936,"commitments":1543822,"valuePools":[{"id":"sprout","monitored":true,"chainValue":30474.03751237,"chainValueZat":3047403751237},{"id":"sapling","monitored":true,"chainValue":578237.33269554,"chainValueZat":57823733269554}],"softforks":[{"id":"bip34","version":2,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip66","version":3,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip65","version":4,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}}],"upgrades":{"5ba81b19":{"name":"Overwinter","activationheight":347500,"status":"active","info":"See https://z.cash/upgrade/overwinter/ for details."},"76b809bb":{"name":"Sapling","activationheight":419200,"status":"active","info":"See https://z.cash/upgrade/sapling/ for details."},"2bb40e60":{"name":"Blossom","activationheight":653600,"status":"active","info":"See https://z.cash/upgrade/blossom/ for details."},"f5b9230b":{"name":"Heartwood","activationheight":903000,"status":"active","info":"See https://z.cash/upgrade/heartwood/ for details."},"e9ff75a6":{"name":"Canopy","activationheight":1046400,"status":"active","info":"See https://z.cash/upgrade/canopy/ for details."}},"consensus":{"chaintip":"e9ff75a6","nextblock":"e9ff75a6"}},"error":null,"id":"curltext"}
А вам надо понять, есть тут ошибки или нет, а так же желательно посмотреть все это в человекочитаемом формате. Сервис вам как раз поможет в этом. Отформатирует все и проверит не потерялась ли где скобка или запятая.
Если кто-то знает сервис удобнее и функциональнее, поделитесь ссылкой.
#сервис #json
👍1
Делал ранее несколько заметок на тему форматирования json. Формат популярный, приходится постоянно с ним работать. В качестве локальной программы лично я обычно использую jq, если ее нет, то какой-то онлайн сервис. Их много и не принципиально, каким именно пользоваться.
Но оказывается, что отформатировать в удобочитаемый вид json умеет python из коробки. С учетом того, что он присутствует по дефолту почти во всех современных дистрибутивах, ставить что-то со стороны или использовать онлайн сервисы нет никакого смысла.
Я лично не знал и не слышал, пока мне не показали, что можно сделать вот так:
Спасибо за подсказку тому, кто это сделал в комментариях.
#json
Но оказывается, что отформатировать в удобочитаемый вид json умеет python из коробки. С учетом того, что он присутствует по дефолту почти во всех современных дистрибутивах, ставить что-то со стороны или использовать онлайн сервисы нет никакого смысла.
Я лично не знал и не слышал, пока мне не показали, что можно сделать вот так:
cat file.json | python -m json.toolСпасибо за подсказку тому, кто это сделал в комментариях.
#json
Существует небольшая, но очень полезная утилита в Linux - jo. Она создаёт json вывод из поданных в неё данных. Покажу на условном примере:
А вот более прикладной пример, который может существенно упростить некоторые проверки в мониторинге. Формируем массив из файлов в директории:
Можно этот же массив предварительно отсортировать по дате с помощью ls:
Свежие файлы будут отображаться первыми. Потом с помощью JSONPath $[0] можно получить имя самого свежего файла или самого старого: $[-1:].
Ещё практический пример. Массив процессов на хосте сразу с исключением дублей:
В зависимости от ключей ps можно формировать нужный список с различными сортировками.
Можно сразу же сформировать данные для LLD правил автообнаружения Zabbix:
Не надо заморачиваться на баше с проставлением запятых и скобок.
Утилита jo, наравне с jq, однозначно пригодится тем, кто много работает с JSON. К тому же живёт в базовых репах и без проблем устанавливается:
Исходники - https://github.com/jpmens/jo
#bash #linux #zabbix #json
# jo name=vova name=sasha name=dima{"name":"vova","name":"sasha","name":"dima"}А вот более прикладной пример, который может существенно упростить некоторые проверки в мониторинге. Формируем массив из файлов в директории:
# jo -p -a /backup/mysql/*[ "/backup/mysql/daily_mysql_2021-09-28_16h11m_Tuesday.sql.gz", "/backup/mysql/daily_mysql_2021-09-29_16h15m_Wednesday.sql.gz", "/backup/mysql/daily_mysql_2021-09-30_16h14m_Friday.sql.gz"] Можно этот же массив предварительно отсортировать по дате с помощью ls:
# ls -t | jo -p -aСвежие файлы будут отображаться первыми. Потом с помощью JSONPath $[0] можно получить имя самого свежего файла или самого старого: $[-1:].
Ещё практический пример. Массив процессов на хосте сразу с исключением дублей:
# ps ax | awk '{print $5}' | jo -a -p | uniq[..... "/usr/bin/newrelic-infra-service", "/usr/bin/newrelic-infra", "/bin/sh", "/usr/sbin/mysqld", "/usr/sbin/sshd", "/usr/sbin/rpc.mountd", "/usr/sbin/rpc.idmapd",......]В зависимости от ключей ps можно формировать нужный список с различными сортировками.
Можно сразу же сформировать данные для LLD правил автообнаружения Zabbix:
# jo -a {#DOMAIN}:ya.ru {#DOMAIN}:r0.ru["{#DOMAIN}:ya.ru","{#DOMAIN}:r0.ru"]Не надо заморачиваться на баше с проставлением запятых и скобок.
Утилита jo, наравне с jq, однозначно пригодится тем, кто много работает с JSON. К тому же живёт в базовых репах и без проблем устанавливается:
# apt install jo# dnf install joИсходники - https://github.com/jpmens/jo
#bash #linux #zabbix #json
👍69👎3
Много раз уже мельком в тематических заметках упоминал про инструмент, которым постоянно пользуюсь. Решил оформить отдельной заметкой, чтобы больше людей обратило внимание. Речь пойдёт о JSONPath Online Evaluator, который есть в виде публичного сервиса, и в виде исходников для установки где-то у себя.
Это простой и наглядный сервис для работы с JSON. Мне он нужен ровно для одной цели - вытаскивать значения с помощью JSONPath для предобработки в Zabbix. JSON очень популярный формат, так что работать с ним приходится постоянно. Возможность предобработки в Zabbix очень сильно упростила настройку мониторинга.
Раньше всё это обрабатывать в скриптах приходилось, но времена сие давно прошли, хотя куча скриптов с тех времён так и осталась. Но сейчас, если настраиваю что-то новое, то по максимум использую встроенную предобработку.
Если есть что-то лучше для этих же задач, поделитесь информацией.
#json
Это простой и наглядный сервис для работы с JSON. Мне он нужен ровно для одной цели - вытаскивать значения с помощью JSONPath для предобработки в Zabbix. JSON очень популярный формат, так что работать с ним приходится постоянно. Возможность предобработки в Zabbix очень сильно упростила настройку мониторинга.
Раньше всё это обрабатывать в скриптах приходилось, но времена сие давно прошли, хотя куча скриптов с тех времён так и осталась. Но сейчас, если настраиваю что-то новое, то по максимум использую встроенную предобработку.
Если есть что-то лучше для этих же задач, поделитесь информацией.
#json
👍38👎3
Какой системный администратор Linux не любит хорошенько грепнуть? Это очень полезный навык, который осваиваешь практически сразу, как начинаешь работать в консоли и тем более писать какие-то скрипты. Но есть формат json, который бессмысленно грепать, потому что с большой вероятностью получишь не то, что тебе надо, так как там все данные либо в одной строке, либо построчно иерархически разбиты.
Какой-то добрый человек решил спасти системных администраторов из прошлого и придумал утилиту, которая позволяет успешно грепать json - gron. Лозунг программы - Make JSON greppable!
Покажу на примере, зачем она может понадобиться. У меня есть статья по мониторингу посещаемости сайтов, где данные берутся из Яндекс.Метрики в формате json. Беру обрезанный кусок json, для наглядного примера:
Вам надо выхватить все значения из data Так просто их не грепнешь в один присест. А через gron очень просто:
Получили список всех значений data в построчном формате. При желании грепается любое конкретное значение (не забываем про экранирование):
Эта утилита для тех, кто по какой-то причине не может или не хочет использовать jsonpath в jq. С его помощью какое-то одно конкретное значение вытащить гораздо проще:
Конкретно в данном примере gron не особо нужен. Это просто первое, что в голову пришло. Им будет удобно грепнуть очень большую лапшу json, которая прилетит к вам в терминал. А это обычное дело. Например, когда я настраивал мониторинг ZONT, мне в консоль вываливалась такая лапша, что на экран не помещалась.
Также с помощью gron удобно сравнить два json:
Исходники - https://github.com/tomnomnom/gron
#json
Какой-то добрый человек решил спасти системных администраторов из прошлого и придумал утилиту, которая позволяет успешно грепать json - gron. Лозунг программы - Make JSON greppable!
Покажу на примере, зачем она может понадобиться. У меня есть статья по мониторингу посещаемости сайтов, где данные берутся из Яндекс.Метрики в формате json. Беру обрезанный кусок json, для наглядного примера:
{ "query" : { "ids" : [ 23506456 ], "dimensions" : [ "ym:s:searchEngine" ], "metrics" : [ "ym:s:users", "ym:s:visits", "ym:s:pageviews" ], "sort" : [ "-ym:s:users" ],},"data" : [ { "dimensions" : [ "ym:s:searchEngine" ], "metrics" : [ 2117.0, 2450.0, 3211.0 ] } ]}Вам надо выхватить все значения из data Так просто их не грепнешь в один присест. А через gron очень просто:
# curl ....... | gron | grep datajson.data = [];json.data[0] = {};json.data[0].dimensions = ["ym:s:searchEngine"];json.data[0].metrics = [];json.data[0].metrics[0] = 2147.0;json.data[0].metrics[1] = 2489.0;json.data[0].metrics[2] = 3271.0;json.data_lag = 0;Получили список всех значений data в построчном формате. При желании грепается любое конкретное значение (не забываем про экранирование):
# curl ....... | gron | grep "data\[0\].metrics\[2\]"json.data[0].metrics[2] = 3271.0;Эта утилита для тех, кто по какой-то причине не может или не хочет использовать jsonpath в jq. С его помощью какое-то одно конкретное значение вытащить гораздо проще:
# curl ....... | jq '.data[].metrics[2]'3271.0Конкретно в данном примере gron не особо нужен. Это просто первое, что в голову пришло. Им будет удобно грепнуть очень большую лапшу json, которая прилетит к вам в терминал. А это обычное дело. Например, когда я настраивал мониторинг ZONT, мне в консоль вываливалась такая лапша, что на экран не помещалась.
Также с помощью gron удобно сравнить два json:
# diff <(gron first.json) <(gron second.json)7c3< json.data[0].metrics[2] = 3271.0;---> json.data[0].metrics[2] = 3531.0;Исходники - https://github.com/tomnomnom/gron
#json
👍65👎5
У меня накопилось много заметок по поводу работы с JSON. Решил сделать подборку, что собрать информацию в одном месте. С этим форматом постоянно приходится работать, так что, думаю, будет полезно. Можно в закладки забрать.
◽ обзорная статья по работе с json в zabbix
◽ jq - утилита для преобразования однострочных json в удобочитаемый вид, а также для получения значений через jsonpath
◽ онлайн сервис JSONLint для проверки синтаксиса
◽ форматирование json в удобочитаемый вид с помощью python
◽ онлайн сервис hcl2json для конвертации форматов json, yaml и hcl друг в друга
◽ jo - консольная утилита, создаёт json из поданных в неё данных. Умеет, к примеру, список файлов в директории оборачивать в json или вывод какой-нибудь консольной команды, типа ps.
◽ онлайн сервис JSONPath для извлечения данных из json
◽ gron - консольная утилита, которая превращает json в текст, к которому можно эффективно применить утилиту grep. То есть делает json грепабельным.
#json
◽ обзорная статья по работе с json в zabbix
◽ jq - утилита для преобразования однострочных json в удобочитаемый вид, а также для получения значений через jsonpath
◽ онлайн сервис JSONLint для проверки синтаксиса
◽ форматирование json в удобочитаемый вид с помощью python
◽ онлайн сервис hcl2json для конвертации форматов json, yaml и hcl друг в друга
◽ jo - консольная утилита, создаёт json из поданных в неё данных. Умеет, к примеру, список файлов в директории оборачивать в json или вывод какой-нибудь консольной команды, типа ps.
◽ онлайн сервис JSONPath для извлечения данных из json
◽ gron - консольная утилита, которая превращает json в текст, к которому можно эффективно применить утилиту grep. То есть делает json грепабельным.
#json
👍61👎3
Делюсь с вами информацией об очень полезной консольной утилите JC. С её помощью можно поток данных из стандартных команд Linux конвертировать в json. Покажу сразу на простом примере:
Вывод имеет смысл сразу через jq пропустить, чтобы было удобнее смотреть.
JC поддерживает большое количество утилит. Это делает её удобной для настройки мониторинга. Например, очень просто сделать мониторинг бэкапов в виде файлов.
Отправляем вывод на Zabbix Server и парсим с помощью JSONPath нужные данные. Например, имя файла, дату и размер. А дальше делаем нужные триггеры. Я раньше всё это на баше через grep, awk, sed и т.д. делал. Но тут намного удобнее.
В репозитории приведён полный список утилит, которые поддерживает jc. Написана программа на python, ставится через pip:
С помощью jc можно парсить вывод STDOUT у Ansible. В статье приведён простой и наглядный пример.
Утилита по нынешним временам очень актуальна и востребована. Рекомендую обратить внимание и сохранить информацию, если прямо сейчас не нужно.
⇨ Исходники / Много примеров
#json
# free | jc --freeВывод имеет смысл сразу через jq пропустить, чтобы было удобнее смотреть.
# free | jc --free | jq[ { "type": "Mem", "total": 1014640, "used": 197868, "free": 276000, "shared": 31280, "buff_cache": 540772, "available": 634004 }, { "type": "Swap", "total": 999996, "used": 175740, "free": 824256 }]JC поддерживает большое количество утилит. Это делает её удобной для настройки мониторинга. Например, очень просто сделать мониторинг бэкапов в виде файлов.
# ls -lh | jc --ls | jqОтправляем вывод на Zabbix Server и парсим с помощью JSONPath нужные данные. Например, имя файла, дату и размер. А дальше делаем нужные триггеры. Я раньше всё это на баше через grep, awk, sed и т.д. делал. Но тут намного удобнее.
В репозитории приведён полный список утилит, которые поддерживает jc. Написана программа на python, ставится через pip:
# pip3 install jcС помощью jc можно парсить вывод STDOUT у Ansible. В статье приведён простой и наглядный пример.
Утилита по нынешним временам очень актуальна и востребована. Рекомендую обратить внимание и сохранить информацию, если прямо сейчас не нужно.
⇨ Исходники / Много примеров
#json
👍108👎1
Короткая заметка про очень крутой сервис по визуализации JSON - jsoncrack.com. Это и готовый онлайн сервис, которым можно сразу пользоваться, и open source проект, который позволит этот сервис запустить у себя.
⇨ https://jsoncrack.com/editor
⇨ https://github.com/AykutSarac/jsoncrack.com
Особо писать тут нечего, просто посмотрите, как это выглядит на практике. Очень упрощает работу по разбору JSON строк. В закладки забрать обязательно и не забыть, наравне с jsonpath.com. Последним постоянно пользуюсь для предобработки айтемов в Zabbix.
Напомню, что у меня есть подборка утилит и сервисов для JSON. Посмотрите, может найдёте для себя что-то полезное. Без JSON сейчас никуда. В мониторинге и сборе логов постоянно приходится иметь с ним дело.
#json
⇨ https://jsoncrack.com/editor
⇨ https://github.com/AykutSarac/jsoncrack.com
Особо писать тут нечего, просто посмотрите, как это выглядит на практике. Очень упрощает работу по разбору JSON строк. В закладки забрать обязательно и не забыть, наравне с jsonpath.com. Последним постоянно пользуюсь для предобработки айтемов в Zabbix.
Напомню, что у меня есть подборка утилит и сервисов для JSON. Посмотрите, может найдёте для себя что-то полезное. Без JSON сейчас никуда. В мониторинге и сборе логов постоянно приходится иметь с ним дело.
#json
👍84👎1
Простая и удобная утилита для работы в консоли с json - fx. Она умеет отображать данные в свёрнутом виде, раскрывая те ветки, что вам нужны. При этом поддерживает мышь. Настроек никаких нет, кроме выбора тем.
В некоторых системах fx есть в базовых репозиториях, например в MacOS, Ubuntu (snap), Arch, FreeBSD. Странно, что даже во фрюху заехала, но нет в rpm и deb репах. Можно просто скачать бинарник из репозитория.
Посмотреть, как fx работает, можно на тестовой публичной апишке:
Либо сохранить какой-нибудь здоровенный json в файл и посмотреть его:
Если много работаете с json, утилита точно пригодится.
⇨ Исходники
#json
В некоторых системах fx есть в базовых репозиториях, например в MacOS, Ubuntu (snap), Arch, FreeBSD. Странно, что даже во фрюху заехала, но нет в rpm и deb репах. Можно просто скачать бинарник из репозитория.
Посмотреть, как fx работает, можно на тестовой публичной апишке:
# curl https://reqres.in/api/users?page=2 | fxЛибо сохранить какой-нибудь здоровенный json в файл и посмотреть его:
# fx data.jsonЕсли много работаете с json, утилита точно пригодится.
⇨ Исходники
#json
👍50👎2