Ознакомьтесь с документацией пакета
jc
Python для разработчиков.
Попробуйте веб-демонстрацию
jc
и REST API.
jc
доступен как плагин фильтра Ansible в коллекцииcommunity.general
. См. этот пост в блоге для примера.
Преобразование JSON
jc
JSON преобразует выходные данные многих инструментов CLI, типов файлов и общих строк для упрощения анализа в сценариях. См. раздел «Парсеры» для получения информации о поддерживаемых командах, типах файлов и строках.
dig example.com | jc --dig
[{ "id" : 38052 , "opcode" : " QUERY " , "status" : " NOERROR " , "flags" :[ " qr " , " rd " , " ra " ],
"query_num" : 1 , "answer_num" : 1 , "authority_num" : 0 , "additional_num" : 1 ,
"opt_pseudosection" :{ "edns" :{ "version" : 0 , "flags" :[], "udp" : 4096 }}, "question" :
{ "name" : " example.com. " , "class" : " IN " , "type" : " A " }, "answer" :[{ "name" :
" example.com. " , "class" : " IN " , "type" : " A " , "ttl" : 39049 , "data" : " 93.184.216.34 " }],
"query_time" : 49 , "server" : " 2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1) " ,
"when" : " Fri Apr 16 16:09:00 PDT 2021 " , "rcvd" : 56 , "when_epoch" : 1618614540 ,
"when_epoch_utc" : null }]
Это позволяет осуществлять дальнейшую обработку вывода в командной строке с помощью таких инструментов, как jq
или jello
путем передачи команд:
$ dig example.com | jc --dig | jq -r ' .[].answer[].data '
93.184.216.34
или используя альтернативный «магический» синтаксис:
$ jc dig example.com | jq -r ' .[].answer[].data '
93.184.216.34
jc
также можно использовать как библиотеку Python. В этом случае возвращаемым значением будет словарь Python, список словарей или даже ленивая итерация словарей вместо JSON:
> >> import subprocess
> >> import jc
> >>
>> > cmd_output = subprocess . check_output ([ 'dig' , 'example.com' ], text = True )
> >> data = jc . parse ( 'dig' , cmd_output )
> >>
>> > data [ 0 ][ 'answer' ]
[{ 'name' : 'example.com.' , 'class' : 'IN' , 'type' : 'A' , 'ttl' : 29658 , 'data' :
'93.184.216.34' }]
Для получения документации по пакету
jc
Python используйтеhelp('jc')
,help('jc.lib')
или просмотрите онлайн-документацию.
Доступны два представления данных. Представление по умолчанию использует строгую схему для каждого синтаксического анализатора и преобразует известные числа в значения JSON int/float. Определенные известные значения None
преобразуются в JSON null
, преобразуются известные логические значения, а в некоторых случаях добавляются дополнительные поля семантического контекста.
Чтобы получить доступ к необработанному, предварительно обработанному JSON, используйте опцию -r
cli или параметр функции raw=True
в parse()
при использовании jc
в качестве библиотеки Python.
Схемы для каждого парсера можно найти по ссылке на документацию рядом с каждым парсером ниже.
Примечания к выпуску можно найти в разделе «Релизы» на Github.
Для получения дополнительной информации о мотивах этого проекта, пожалуйста, прочтите мою публикацию в блоге «Привнесение философии Unix в 21 век» и мое интервью с Console.
См. также:
Варианты использования:
Есть несколько способов получить jc
. Вы можете установить его через pip
, репозитории пакетов ОС или загрузив правильный двоичный файл для вашей архитектуры и запустив его в любом месте вашей файловой системы.
pip3 install jc
ОС | Команда |
---|---|
Дебиан/Убунту Линукс | apt-get install jc |
Федора Linux | dnf install jc |
openSUSE Linux | zypper install jc |
Арка Linux | pacman -S jc |
НикОС Linux | nix-env -iA nixpkgs.jc или nix-env -iA nixos.jc |
Система Guix Linux | guix install jc |
Генту Линукс | emerge dev-python/jc |
Фотон Linux | tdnf install jc |
macOS | brew install jc |
FreeBSD | portsnap fetch update && cd /usr/ports/textproc/py-jc && make install clean |
Плагин Ansible-фильтра | ansible-galaxy collection install community.general |
Разъем FortiSOAR | Установите из FortiSOAR Connector Marketplace. |
Дополнительные пакеты ОС см. на странице https://repology.org/project/jc/versions.
Предварительно скомпилированные двоичные файлы см. в разделе «Релизы» на Github.
jc
принимает входные данные по конвейеру из STDIN
и выводит JSON-представление выходных данных предыдущей команды в STDOUT
.
COMMAND | jc [SLICE] [OPTIONS] PARSER
cat FILE | jc [SLICE] [OPTIONS] PARSER
echo STRING | jc [SLICE] [OPTIONS] PARSER
В качестве альтернативы можно использовать «магический» синтаксис, добавив jc
к преобразуемой команде или перед абсолютным путем для файлов Proc. Параметры можно передать jc
непосредственно перед указанием пути к файлу команды или процедуры. (Примечание: псевдонимы команд и встроенные функции оболочки не поддерживаются)
jc [SLICE] [OPTIONS] COMMAND
jc [SLICE] [OPTIONS] /proc/ < path-to-procfile >
Вывод JSON может быть компактным (по умолчанию) или иметь красивый формат с помощью опции -p
.
Аргумент | Команда или тип файла | Документация |
---|---|---|
--acpi | анализатор команд acpi | подробности |
--airport | airport -I команду парсера | подробности |
--airport-s | парсер команды airport -s | подробности |
--apt-cache-show | apt-cache show синтаксический анализатор команд | подробности |
--apt-get-sqq | анализатор команд apt-get -sqq | подробности |
--arp | анализатор arp -команд | подробности |
--asciitable | Анализатор таблиц ASCII и Unicode | подробности |
--asciitable-m | многострочный анализатор таблиц ASCII и Unicode | подробности |
--blkid | анализатор команд blkid | подробности |
--bluetoothctl | синтаксический анализатор команд bluetoothctl | подробности |
--cbt | синтаксический анализатор команд cbt (Google Bigtable) | подробности |
--cef | Синтаксический анализатор строк CEF | подробности |
--cef-s | Анализатор потоковой передачи строк CEF | подробности |
--certbot | анализатор команд certbot | подробности |
--chage | парсер команды chage --list | подробности |
--cksum | анализатор команд cksum и sum | подробности |
--clf | Анализатор файлов общего и комбинированного формата журналов | подробности |
--clf-s | Анализатор потоковой передачи файлов общего и комбинированного формата журналов | подробности |
--crontab | команда crontab и анализатор файлов | подробности |
--crontab-u | парсер файлов crontab с поддержкой пользователей | подробности |
--csv | Парсер CSV-файлов | подробности |
--csv-s | Анализатор потоковой передачи CSV-файлов | подробности |
--curl-head | парсер команды curl --head | подробности |
--date | анализатор команд date | подробности |
--datetime-iso | Синтаксический анализатор строк даты и времени ISO 8601 | подробности |
--debconf-show | анализатор команд debconf-show | подробности |
--df | анализатор команд df | подробности |
--dig | анализатор команд dig | подробности |
--dir | парсер команды dir | подробности |
--dmidecode | анализатор команд dmidecode | подробности |
--dpkg-l | dpkg -l анализатор команд | подробности |
--du | парсер команд du | подробности |
--efibootmgr | анализатор команд efibootmgr | подробности |
--email-address | Анализатор строки адреса электронной почты | подробности |
--env | анализатор команд env | подробности |
--ethtool | анализатор команд ethtool | подробности |
--file | анализатор file команд | подробности |
--find | find парсер команд | подробности |
--findmnt | анализатор команд findmnt | подробности |
--finger | анализатор команд finger | подробности |
--free | free парсер команд | подробности |
--fstab | парсер файлов /etc/fstab | подробности |
--git-log | анализатор команд git log | подробности |
--git-log-s | анализатор потоковой передачи команд git log | подробности |
--git-ls-remote | анализатор команд git ls-remote | подробности |
--gpg | gpg --with-colons анализатор команд | подробности |
--group | парсер файлов /etc/group | подробности |
--gshadow | парсер файлов /etc/gshadow | подробности |
--hash | анализатор hash -команд | подробности |
--hashsum | анализатор команд hashsum ( md5sum , shasum и т. д.) | подробности |
--hciconfig | анализатор команд hciconfig | подробности |
--history | анализатор команд history | подробности |
--host | анализатор команд host | подробности |
--hosts | парсер файлов /etc/hosts | подробности |
--http-headers | Парсер HTTP-заголовков | подробности |
--id | id команд id | подробности |
--ifconfig | анализатор команд ifconfig | подробности |
--ini | парсер INI-файлов | подробности |
--ini-dup | INI с парсером файлов дубликатов ключей | подробности |
--iostat | анализатор команд iostat | подробности |
--iostat-s | анализатор потоковой передачи команд iostat | подробности |
--ip-address | Анализатор строк адресов IPv4 и IPv6 | подробности |
--ipconfig | ipconfig синтаксический анализатор команд Windows | подробности |
--iptables | анализатор команд iptables | подробности |
--ip-route | анализатор команд ip route | подробности |
--iw-scan | iw dev [device] scan | подробности |
--iwconfig | анализатор команд iwconfig | подробности |
--jar-manifest | Анализатор файлов Java MANIFEST.MF | подробности |
--jobs | анализатор команд jobs | подробности |
--jwt | Анализатор строк JWT | подробности |
--kv | Файл ключей/значений и анализатор строк | подробности |
--kv-dup | Ключ/значение с дубликатом файла ключа и анализатором строк | подробности |
--last | анализатор команд last и lastb | подробности |
--ls | анализатор команд ls | подробности |
--ls-s | анализатор потоковой передачи команд ls | подробности |
--lsattr | анализатор команд lsattr | подробности |
--lsb-release | анализатор команд lsb_release | подробности |
--lsblk | анализатор команд lsblk | подробности |
--lsmod | анализатор команд lsmod | подробности |
--lsof | анализатор команд lsof | подробности |
--lspci | анализатор команд lspci -mmv | подробности |
--lsusb | анализатор команд lsusb | подробности |
--m3u | Парсер файлов M3U и M3U8 | подробности |
--mdadm | анализатор команд mdadm | подробности |
--mount | синтаксический анализатор команд mount | подробности |
--mpstat | анализатор команд mpstat | подробности |
--mpstat-s | анализатор потоковой передачи команд mpstat | подробности |
--needrestart | анализатор команды needrestart -b | подробности |
--netstat | анализатор команд netstat | подробности |
--nmcli | анализатор команд nmcli | подробности |
--nsd-control | анализатор команд nsd-control | подробности |
--ntpq | анализатор команд ntpq -p | подробности |
--openvpn | парсер файла openvpn-status.log | подробности |
--os-prober | анализатор команд os-prober | подробности |
--os-release | парсер файлов /etc/os-release | подробности |
--pacman | анализатор команд pacman | подробности |
--passwd | парсер файлов /etc/passwd | подробности |
--path | Парсер строки пути POSIX | подробности |
--path-list | Синтаксический анализатор строк списка путей POSIX | подробности |
--pci-ids | парсер файлов pci.ids | подробности |
--pgpass | Парсер файлов паролей PostgreSQL | подробности |
--pidstat | pidstat -H анализатор команд | подробности |
--pidstat-s | pidstat -H анализатор потоковой передачи команд | подробности |
--ping | анализатор команд ping и ping6 | подробности |
--ping-s | анализатор потоковой передачи команд ping и ping6 | подробности |
--pip-list | анализатор команд pip list | подробности |
--pip-show | анализатор команд pip show | подробности |
--pkg-index-apk | Анализатор файлов индекса пакетов Alpine Linux | подробности |
--pkg-index-deb | Анализатор файлов индекса пакетов Debian | подробности |
--plist | анализатор PLIST-файлов | подробности |
--postconf | анализатор команд postconf -M | подробности |
--proc | /proc/ парсер файлов | подробности |
--ps | анализатор команд ps | подробности |
--resolve-conf | парсер файла /etc/resolve.conf | подробности |
--route | анализатор команд route | подробности |
--rpm-qi | Синтаксический анализатор команд rpm -qi | подробности |
--rsync | анализатор команд rsync | подробности |
--rsync-s | анализатор потоковой передачи команд rsync | подробности |
--semver | Анализатор строк семантической версии | подробности |
--sfdisk | анализатор команд sfdisk | подробности |
--shadow | парсер файлов /etc/shadow | подробности |
--srt | Парсер файлов SRT | подробности |
--ss | анализатор команд ss | подробности |
--ssh-conf | Конфигурационный файл ssh и анализатор команд ssh -G | подробности |
--sshd-conf | Конфигурационный файл sshd и анализатор команд sshd -T | подробности |
--stat | анализатор команд stat | подробности |
--stat-s | анализатор потоковой передачи команд stat | подробности |
--swapon | парсер команд swapon | подробности |
--sysctl | анализатор команд sysctl | подробности |
--syslog | Анализатор строк системного журнала RFC 5424 | подробности |
--syslog-s | Анализатор потоковой передачи строк Syslog RFC 5424 | подробности |
--syslog-bsd | Анализатор строк системного журнала RFC 3164 | подробности |
--syslog-bsd-s | Анализатор потоковой передачи строк Syslog RFC 3164 | подробности |
--systemctl | анализатор команд systemctl | подробности |
--systemctl-lj | анализатор команд systemctl list-jobs | подробности |
--systemctl-ls | анализатор команд systemctl list-sockets | подробности |
--systemctl-luf | Синтаксический анализатор команд systemctl list-unit-files | подробности |
--systeminfo | анализатор команд systeminfo | подробности |
--time | /usr/bin/time анализатор команд | подробности |
--timedatectl | синтаксический анализатор команды timedatectl status | подробности |
--timestamp | Синтаксический анализатор строк временных меток Unix Epoch | подробности |
--toml | Анализатор TOML-файлов | подробности |
--top | парсер команды top -b | подробности |
--top-s | анализатор потоковой передачи команды top -b | подробности |
--tracepath | анализатор команд tracepath и tracepath6 | подробности |
--traceroute | анализатор команд traceroute и traceroute6 | подробности |
--tune2fs | анализатор команды tune2fs -l | подробности |
--udevadm | анализатор команд udevadm info | подробности |
--ufw | анализатор команд ufw status | подробности |
--ufw-appinfo | ufw app info [application] анализатор команд | подробности |
--uname | uname -a анализатор команд | подробности |
--update-alt-gs | update-alternatives --get-selections синтаксический анализатор команд | подробности |
--update-alt-q | update-alternatives --query анализатор команд | подробности |
--upower | анализатор команд upower | подробности |
--uptime | анализатор команд uptime | подробности |
--url | Парсер URL-строки | подробности |
--ver | Анализатор строки версии | подробности |
--veracrypt | анализатор команд veracrypt | подробности |
--vmstat | анализатор команд vmstat | подробности |
--vmstat-s | анализатор потоковой передачи команд vmstat | подробности |
--w | w анализатор команд | подробности |
--wc | анализатор команд wc | подробности |
--wg-show | парсер команд wg show | подробности |
--who | who командует парсером | подробности |
--x509-cert | Анализатор файлов сертификатов X.509 PEM и DER | подробности |
--x509-csr | Анализатор файлов запросов сертификатов X.509 PEM и DER | подробности |
--xml | парсер XML-файлов | подробности |
--xrandr | синтаксический анализатор команд xrandr | подробности |
--yaml | Парсер YAML-файлов | подробности |
--zipinfo | анализатор команд zipinfo | подробности |
--zpool-iostat | парсер команд zpool iostat | подробности |
--zpool-status | парсер команд zpool status | подробности |
Короткий | Длинный | Описание |
---|---|---|
-a | --about | О jc . Выводит информацию о jc и парсерах (разумеется, в формате JSON или YAML!) |
-C | --force-color | Принудительный вывод цвета даже при использовании каналов (переопределяет -m и переменную env NO_COLOR ) |
-d | --debug | Режим отладки. Печатает сообщения трассировки, если возникают проблемы с синтаксическим анализом (используйте -dd для подробной отладки). |
-h | --help | Помощь. Используйте jc -h --parser_name для документации парсера. Используйте дважды, чтобы показать скрытые парсеры (например -hh ). Используйте трижды, чтобы показать категории анализатора (например, -hhh ). |
-m | --monochrome | Монохромный вывод |
-M | --meta-out | Добавьте метаданные в вывод, включая метку времени, имя парсера, магическую команду, код выхода магической команды и т. д. |
-p | --pretty | Довольно отформатировать вывод JSON |
-q | --quiet | Тихий режим. Подавляет предупреждающие сообщения парсера (используйте -qq , чтобы игнорировать ошибки парсера потоковой передачи) |
-r | --raw | Сырой вывод. Обеспечивает более буквальный вывод, обычно со строковыми значениями, без дополнительной семантической обработки. |
-s | --slurp | Объединение нескольких строк в массив. (используйте -hhh , чтобы найти совместимые парсеры) |
-u | --unbuffer | Разбуферировать вывод |
-v | --version | Информация о версии |
-y | --yaml-out | YAML-вывод |
-B | --bash-comp | Создать сценарий завершения оболочки Bash (подробнее) |
-Z | --zsh-comp | Создать сценарий завершения оболочки Zsh (подробнее) |
Нарезка строк поддерживается с использованием синтаксиса START:STOP
аналогичного нарезке строк в Python. Это позволяет вам пропускать строки в начале и/или конце ввода STDIN
, который вы хотите преобразовать jc
.
START
и STOP
могут быть положительными или отрицательными целыми числами или пустыми и позволяют указать, сколько строк пропускать и сколько строк обрабатывать. Положительные и пустые срезы наиболее эффективно используют память. Любые отрицательные целые числа в срезе будут использовать больше памяти.
Например, чтобы пропустить первую и последнюю строку следующего текста, вы можете выразить фрагмент несколькими способами:
$ cat table.txt
# ## We want to skip this header ###
col1 col2
foo 1
bar 2
# ## We want to skip this footer ###
$ cat table.txt | jc 1:-1 --asciitable
[{ " col1 " : " foo " , " col2 " : " 1 " },{ " col1 " : " bar " , " col2 " : " 2 " }]
$ cat table.txt | jc 1:4 --asciitable
[{ " col1 " : " foo " , " col2 " : " 1 " },{ " col1 " : " bar " , " col2 " : " 2 " }]
В этом примере фрагменты строк 1:-1
и 1:4
обеспечивают одинаковый результат.
При использовании положительных целых чисел индекс STOP
не включается. Положительные срезы отсчитываются от первой строки входных данных к концу, начиная с 0
в качестве первой строки. Отрицательные срезы отсчитываются от последней строки к началу, начиная с -1
в качестве последней строки. Именно так работает функция нарезки Python.
Вот разбивка вариантов фрагмента строки:
Обозначение среза | Обработанные входные строки |
---|---|
START:STOP | линии START через STOP - 1 |
START: | строки START до конца вывода |
:STOP | строки от начала до STOP - 1 |
-START:STOP | Строки START от конца до STOP - 1 |
START:-STOP | линии START через STOP линии с конца |
-START:-STOP | Строки START с конца через линии STOP с конца |
-START: | START строки от конца до остальной части вывода |
:-STOP | линии с начала через STOP линии с конца |
: | все строки |
Некоторые парсеры поддерживают ввод нескольких элементов и могут выводить массив результатов за один проход. Slurping работает для анализаторов строк, которые принимают одну строку ввода. (например, url
и ip-address
). Чтобы просмотреть список парсеров, поддерживающих опцию --slurp
, используйте jc -hhh
.
Например, вы можете отправить файл с несколькими IP-адресами (по одному в строке) в jc
с опцией --slurp
, и будет выведен массив результатов:
$ cat ip-addresses.txt | jc --slurp --ip-address
[ < multiple output objects > ]
Магический синтаксис файлов /proc
автоматически поддерживает обработку нескольких файлов (нет необходимости использовать опцию --slurp
). Например, вы можете конвертировать множество PID-файлов одновременно:
$ jc /proc/ * /status
[ < multiple output objects > ]
Когда используется магический синтаксис /proc
и выбрано несколько файлов, в выходные данные вставляется дополнительное поле _file
, поэтому легче определить, к какому файлу относится каждый выходной объект.
Наконец, опция --meta-out
может использоваться в сочетании с выводом данных. В этом случае выпитый вывод заворачивается в объект со следующей структурой:
{
"result" : [ <multiple output objects> ],
"_jc_meta" : {
"parser" : " url " ,
"timestamp" : 1706235558.654576 ,
"slice_start" : null ,
"slice_end" : null ,
"input_list" : [
" http://www.google.com " ,
" https://www.apple.com " ,
" https://www.microsoft.com "
]
}
}
С помощью --meta-out
input_list
содержит список входных данных (фактические входные строки или имена файлов /proc
), поэтому вы можете определить, какой выходной объект относится к каждой входной строке или имени файла /proc
.
Любые фатальные ошибки внутри jc
будут генерировать код выхода 100
, в противном случае код выхода будет 0
.
При использовании «магического» синтаксиса (например, jc ifconfig eth0
), jc
сохранит код завершения анализируемой программы и добавит его к коду завершения jc
. Таким образом, легче определить, возникла ли ошибка в анализируемой программе или jc
.
Рассмотрим следующие примеры с использованием ifconfig
:
код выхода ifconfig | код выхода jc | Комбинированный код выхода | Интерпретация |
---|---|---|---|
0 | 0 | 0 | Нет ошибок |
1 | 0 | 1 | Ошибка в ifconfig |
0 | 100 | 100 | Ошибка в jc |
1 | 100 | 101 | Ошибка как в ifconfig , так и в jc |
При использовании «магического» синтаксиса вы также можете получить код завершения вызываемой программы, используя параметр --meta-out
или -M
. Это добавит к выходным данным объект _jc_meta
, который будет включать информацию о магической команде, включая код выхода.
Вот пример с ping
:
$ jc --meta-out -p ping -c2 192.168.1.252
{
" destination_ip " : " 192.168.1.252 " ,
" data_bytes " : 56,
" pattern " : null,
" destination " : " 192.168.1.252 " ,
" packets_transmitted " : 2,
" packets_received " : 0,
" packet_loss_percent " : 100.0,
" duplicates " : 0,
" responses " : [
{
" type " : " timeout " ,
" icmp_seq " : 0,
" duplicate " : false
}
],
" _jc_meta " : {
" parser " : " ping " ,
" timestamp " : 1661357115.27949,
" magic_command " : [
" ping " ,
" -c2 " ,
" 192.168.1.252 "
],
" magic_command_exit " : 2
}
}
$ echo $?
2
Вы можете указать собственные цвета через переменную среды JC_COLORS
. Переменная среды JC_COLORS
принимает четыре строковых значения, разделенных запятыми, в следующем формате:
JC_COLORS= < keyname_color > , < keyword_color > , < number_color > , < string_color >
Цвета: black
, red
, green
, yellow
, blue
, magenta
, gray
cyan
brightblack
, brightred
-красный, ярко-зеленый, brightgreen
-желтый, brightyellow
, brightblue
, brightmagenta
brightcyan
, white
или default
.
Например, чтобы установить цвета по умолчанию:
JC_COLORS=blue,brightblack,magenta,green
или
JC_COLORS=default,default,default,default
Вы можете установить для переменной среды NO_COLOR
любое значение, чтобы отключить вывод цвета в jc
. Обратите внимание, что использование параметра -C
для принудительного вывода цвета переопределяет как переменную среды NO_COLOR
, так и параметр -m
.
Большинство парсеров загружают все данные из STDIN
, анализируют их, а затем последовательно выводят весь документ JSON. Существуют некоторые потоковые анализаторы (например, ls-s
и ping-s
), которые немедленно начинают обработку и построчный вывод данных в виде строк JSON (также известных как NDJSON), пока они получены из STDIN
. Это может значительно уменьшить объем памяти, необходимый для анализа больших объемов вывода команды (например, ls -lR /
), а иногда может ускорить обработку данных. Потоковые парсеры ведут себя немного иначе, чем стандартные парсеры, как описано ниже.
Примечание. Потоковые парсеры нельзя использовать с «магическим» синтаксисом.
Возможно, вы захотите игнорировать ошибки анализа при использовании потоковых анализаторов, поскольку они могут использоваться в долгоживущих конвейерах обработки, а ошибки могут привести к поломке канала. Чтобы игнорировать ошибки синтаксического анализа, используйте опцию -qq
cli или аргумент ignore_exceptions=True
с функцией parse()
. Это добавит объект _jc_meta
к выводу JSON с атрибутом success
. Если success
true
, то проблем с разбором строки не возникло. Если success
равен false
, значит, обнаружена проблема синтаксического анализа, и будут добавлены поля error
и line
, включающие краткое описание ошибки и содержимое неразбираемой строки соответственно:
Успешно проанализирована строка с опцией -qq
:
{
"command_data" : " data " ,
"_jc_meta" : {
"success" : true
}
}
Неудачно проанализированная строка с опцией -qq
:
{
"_jc_meta" : {
"success" : false ,
"error" : " error message " ,
"line" : " original line data "
}
}
Большинство операционных систем буферизуют выходные данные, передаваемые от процесса к процессу. Буфер обычно составляет около 4 КБ. При просмотре вывода в терминале буфер ОС не задействован, поэтому вывод сразу отображается на экране. Однако при объединении нескольких процессов может показаться, что выходные данные зависают, когда входные данные очень медленные (например, ping
):
$ ping 1.1.1.1 | jc --ping-s | jq
<slow output>
Это связано с тем, что в этом примере ОС использует буфер размером 4 КБ между jc
и jq
. Чтобы отображать данные на терминале в реальном времени, вы можете отключить буфер с помощью опции -u
(unbuffer) cli:
$ ping 1.1.1.1 | jc --ping-s -u | jq
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
...
Примечание. Небуферизованный вывод может быть медленнее для больших потоков данных.
Потоковые парсеры принимают любой итерируемый объект и возвращают итерируемый объект, позволяющий отложенную обработку данных. Входные данные должны повторяться по строкам строковых данных. Примерами хороших входных данных являются sys.stdin
или str.splitlines()
.
Чтобы использовать возвращенный итерируемый объект в своем коде, просто пройдите по нему или используйте встроенную функцию next():
import jc
result = jc . parse ( 'ls_s' , ls_command_output . splitlines ())
for item in result :
print ( item [ "filename" ])
Плагины парсера могут быть помещены в папку jc/jcparsers
в вашем локальном «каталоге данных приложения» :
$HOME/.local/share/jc/jcparsers
$HOME/Library/Application Support/jc/jcparsers
$LOCALAPPDATAjcjcjcparsers
Плагины парсера представляют собой стандартные файлы модулей Python. Используйте парсер jc/parsers/foo.py
или jc/parsers/foo_s.py (streaming)
в качестве шаблона и просто поместите файл .py
в подпапку jcparsers
. Любые зависимости можно поместить в папку jc
над jcparsers
и импортировать в код парсера.
Имена файлов плагинов синтаксического анализатора должны быть допустимыми именами модулей Python и, следовательно, должны начинаться с буквы и полностью состоять из букв, цифр и символов подчеркивания. Локальные плагины могут переопределять парсеры по умолчанию.
Примечание. Каталог данных приложения соответствует спецификации базового каталога XDG.
Для достижения наилучших результатов установите переменные среды локали на C
или en_US.UTF-8
изменив переменную LC_ALL
:
$ LC_ALL=C date | jc --date
Вы также можете установить переменные локали индивидуально:
$ export LANG=C
$ export LC_NUMERIC=C
В некоторых старых системах вывод UTF-8 будет понижен до ASCII с escape-последовательностями \u
если языковой стандарт C
не поддерживает кодировку UTF-8.
Некоторые анализаторы добавляют к выходным данным рассчитанные поля временных меток эпохи. Если имя поля метки времени не имеет суффикса _utc
, оно считается наивным. (т.е. на основе местного часового пояса системы, на которой был запущен анализатор jc
).
Если в тексте вывода команды можно определить часовой пояс UTC, временная метка будет учитывать часовой пояс и иметь суффикс _utc
в имени ключа. (например, epoch_utc
) Никакие другие часовые пояса не поддерживаются для известных временных меток.
jc
можно использовать практически в любой оболочке. Некоторые современные оболочки имеют встроенные возможности десериализации и фильтрации JSON, что делает использование jc
еще более удобным.
Например, в NGS (Next Generation Shell) возможно следующее:
myvar = ` ` jc dig www.google.com ` ` [0].answer[0].data
При этом запускается jc
, анализируется выходной JSON и присваивается полученная структура данных переменной в одной строке кода.
Дополнительные примеры использования jc
в других оболочках см. на этой вики-странице.
Некоторые парсеры, такие как dig
, xml
, csv
и т. д., будут работать на любой платформе. Другие анализаторы, преобразующие выходные данные для конкретной платформы, будут генерировать предупреждающее сообщение, если они запускаются на неподдерживаемой платформе. Чтобы просмотреть всю информацию о парсере, включая совместимость, запустите jc -ap
.
Вы по-прежнему можете использовать парсер на неподдерживаемой платформе — например, вы можете захотеть проанализировать файл с выводом linux lsof
на ноутбуке с macOS или Windows. В этом случае вы можете подавить предупреждающее сообщение с помощью опции -q
cli или параметра функции quiet=True
в parse()
:
macOS:
cat lsof.out | jc -q --lsof
или Windows:
type lsof.out | jc -q --lsof
Протестировано на:
Не стесняйтесь добавлять/улучшать код или парсеры! Вы можете использовать парсеры jc/parsers/foo.py
или jc/parsers/foo_s.py (streaming)
в качестве шаблона и отправить свой парсер с запросом на включение.
Пожалуйста, ознакомьтесь с Руководством по участию для получения дополнительной информации.
ifconfig-parser
от KnightWhoSayNixmltodict
от Мартина Блехаruamel.yaml
от Антона ван дер Нойтаtrparse
от Луиса Бенитеса Вот несколько примеров вывода jc
. Дополнительные примеры см. здесь или в документации по парсеру.
arp | jc -p --arp # or: jc -p arp
[
{