jc(1) JSON Convert jc(1)

jc - تبدیل خروجی بسیاری از ابزارهای خط فرمان، انواع فایل‌ها و رشته‌ها به JSON

نحو استاندارد:

COMMAND | jc [SLICE] [OPTIONS] PARSER

cat FILE | jc [SLICE] [OPTIONS] PARSER

echo STRING | jc [SLICE] [OPTIONS] PARSER

نحو جادویی (Magic):

jc [SLICE] [OPTIONS] COMMAND

jc [SLICE] [OPTIONS] /proc/<path-to-procfile>

jc خروجی بسیاری از ابزارهای خط فرمان، انواع فایل‌ها و رشته‌های متداول را برای تجزیهٔ آسان‌تر در اسکریپت‌ها به فرمت JSON تبدیل می‌کند. jc ورودی هدایت‌شده از طریق پایپ را از STDIN دریافت کرده و یک نمایش JSON از خروجی دستور قبلی را به STDOUT می‌فرستد. به عنوان روشی جایگزین، می‌توان با قرار دادن jc در ابتدای دستور مورد نظر برای تبدیل، از «نحو جادویی» استفاده کرد. گزینه‌ها را می‌توان بلافاصله پیش از درج دستور به jc ارسال نمود. (نکته: نحو جادویی از دستورهای داخلی شل یا نام‌های مستعار پشتیبانی نمی‌کند)

تجزیه‌کننده‌ها (Parsers):

تجزیه‌کنندهٔ دستور `acpi`
تجزیه‌کنندهٔ دستور `airport -I`
تجزیه‌کنندهٔ دستور `airport -s`
تجزیه‌کنندهٔ دستور `amixer`
تجزیه‌کنندهٔ دستور `apt-cache show`
تجزیه‌کنندهٔ دستور `apt-get -sqq`
تجزیه‌کنندهٔ دستور `arp`
تجزیه‌کنندهٔ جدول‌های ASCII و Unicode
تجزیه‌کنندهٔ جدول‌های چندخطی ASCII و Unicode
تجزیه‌کنندهٔ دستور `blkid`
تجزیه‌کنندهٔ دستور `bluetoothctl`
تجزیه‌کنندهٔ دستور `cbt` (Google Bigtable)
تجزیه‌کنندهٔ رشتهٔ CEF
تجزیه‌کنندهٔ جریانی (streaming) رشتهٔ CEF
تجزیه‌کنندهٔ دستور `certbot`
تجزیه‌کنندهٔ دستور `chage --list`
تجزیه‌کنندهٔ دستورهای `cksum` و `sum`
تجزیه‌کنندهٔ فایل قالب‌های لاگ Common و Combined Log Format
تجزیه‌کنندهٔ جریانی فایل قالب‌های لاگ Common و Combined Log Format
تجزیه‌کنندهٔ دستور و فایل `crontab`
تجزیه‌کنندهٔ فایل `crontab` با پشتیبانی از کاربر
تجزیه‌کنندهٔ فایل CSV
تجزیه‌کنندهٔ فایل CSV با سربرگ ضمنی (implicit header)
تجزیه‌کنندهٔ جریانی فایل CSV
تجزیه‌کنندهٔ جریانی فایل CSV با سربرگ ضمنی
تجزیه‌کنندهٔ دستور `curl --head`
تجزیه‌کنندهٔ دستور `date`
تجزیه‌کنندهٔ رشتهٔ تاریخ و زمان ISO 8601
تجزیه‌کنندهٔ دستور `debconf-show`.TP --df تجزیه‌گر دستور `df`
تجزیه‌گر دستور `dig`
تجزیه‌گر دستور `dir`
تجزیه‌گر دستور `dmidecode`
تجزیه‌گر دستور `dpkg -l`
تجزیه‌گر دستور `du`
تجزیه‌گر دستور `efibootmgr`
تجزیه‌گر رشته نشانی ایمیل
تجزیه‌گر دستور `env`
تجزیه‌گر دستور `ethtool`
تجزیه‌گر دستور `file`
تجزیه‌گر دستور `find`
تجزیه‌گر دستور `findmnt`
تجزیه‌گر دستور `finger`
تجزیه‌گر دستور `free`
تجزیه‌گر فایل `/etc/fstab`
تجزیه‌گر دستور `git log`
تجزیه‌گر جریانی دستور `git log`
تجزیه‌گر دستور `git ls-remote`
تجزیه‌گر دستور `gpg --with-colons`
تجزیه‌گر فایل `/etc/group`
تجزیه‌گر فایل `/etc/gshadow`
تجزیه‌گر دستور `hash`
تجزیه‌گر دستور hashsum (`md5sum`، `shasum` و غیره)
تجزیه‌گر دستور `hciconfig`
تجزیه‌گر دستور `history`
تجزیه‌گر دستور `host`
تجزیه‌گر فایل `/etc/hosts`
تجزیه‌گر سرآیندهای HTTP
تجزیه‌گر دستور `id`
تجزیه‌گر دستور `ifconfig`
تجزیه‌گر فایل INI
تجزیه‌گر فایل INI با کلیدهای تکراری
تجزیه‌گر دستور `iostat`
تجزیه‌گر جریانی دستور `iostat`
تجزیه‌گر رشته نشانی IPv4 و IPv6.TP --ipconfig تجزیه‌کننده دستور ویندوز `ipconfig`
تجزیه‌کننده دستور `iptables`
تجزیه‌کننده دستور `ip route`
تجزیه‌کننده دستور `iw dev [device] scan`
تجزیه‌کننده دستور `iwconfig`
تجزیه‌کننده فایل MANIFEST.MF جاوا
تجزیه‌کننده دستور `jobs`
تجزیه‌کننده رشته JWT
تجزیه‌کننده فایل و رشته کلید/مقدار
تجزیه‌کننده فایل و رشته کلید/مقدار با کلیدهای تکراری
تجزیه‌کننده دستورهای `last` و `lastb`
تجزیه‌کننده دستور `ls`
تجزیه‌کننده جریانی دستور `ls`
تجزیه‌کننده دستور `lsattr`
تجزیه‌کننده دستور `lsb_release`
تجزیه‌کننده دستور `lsblk`
تجزیه‌کننده دستور `lsmod`
تجزیه‌کننده دستور `lsof`
تجزیه‌کننده دستور `lspci -mmv`
تجزیه‌کننده دستور `lsusb`
تجزیه‌کننده فایل‌های M3U و M3U8
تجزیه‌کننده دستور `mdadm`
تجزیه‌کننده دستور `mount`
تجزیه‌کننده دستور `mpstat`
تجزیه‌کننده جریانی دستور `mpstat`
تجزیه‌کننده دستور `needrestart -b`
تجزیه‌کننده دستور `netstat`
تجزیه‌کننده دستور `net localgroup`
تجزیه‌کننده دستور `net user`
تجزیه‌کننده دستور `nmcli`
تجزیه‌کننده دستور `nsd-control`
تجزیه‌کننده دستور `ntpq -p`
تجزیه‌کننده فایل openvpn-status.log
تجزیه‌کننده دستور `os-prober`
تجزیه‌کننده فایل `/etc/os-release`
تجزیه‌کننده دستور `pacman`.TP --passwd تجزیه‌کنندهٔ فایل `/etc/passwd`
تجزیه‌کنندهٔ رشتهٔ مسیر POSIX
تجزیه‌کنندهٔ رشتهٔ فهرست مسیرهای POSIX
تجزیه‌کنندهٔ فایل `pci.ids`
تجزیه‌کنندهٔ فایل گذرواژهٔ PostgreSQL
تجزیه‌کنندهٔ دستور `pidstat -H`
تجزیه‌کنندهٔ جریانی دستور `pidstat -H`
تجزیه‌کنندهٔ دستورهای `ping` و `ping6`
تجزیه‌کنندهٔ جریانی دستورهای `ping` و `ping6`
تجزیه‌کنندهٔ دستور `pip list`
تجزیه‌کنندهٔ دستور `pip show`
تجزیه‌کنندهٔ فایل نمایهٔ بسته‌های Alpine Linux
تجزیه‌کنندهٔ فایل نمایهٔ بسته‌های Debian
تجزیه‌کنندهٔ فایل PLIST
تجزیه‌کنندهٔ دستور `postconf -M`
تجزیه‌کنندهٔ فایل `/proc/`
تجزیه‌کنندهٔ فایل `/proc/buddyinfo`
تجزیه‌کنندهٔ فایل `/proc/cmdline`
تجزیه‌کنندهٔ فایل `/proc/consoles`
تجزیه‌کنندهٔ فایل `/proc/cpuinfo`
تجزیه‌کنندهٔ فایل `/proc/crypto`
تجزیه‌کنندهٔ فایل `/proc/devices`
تجزیه‌کنندهٔ فایل `/proc/diskstats`
تجزیه‌کنندهٔ فایل `/proc/filesystems`
تجزیه‌کنندهٔ فایل `/proc/interrupts`
تجزیه‌کنندهٔ فایل `/proc/iomem`
تجزیه‌کنندهٔ فایل `/proc/ioports`
تجزیه‌کنندهٔ فایل `/proc/loadavg`
تجزیه‌کنندهٔ فایل `/proc/locks`
تجزیه‌کنندهٔ فایل `/proc/meminfo`
تجزیه‌کنندهٔ فایل `/proc/modules`
تجزیه‌کنندهٔ فایل `/proc/mtrr`
تجزیه‌کنندهٔ فایل `/proc/pagetypeinfo`
تجزیه‌کنندهٔ فایل `/proc/partitions`
تجزیه‌کنندهٔ فایل `/proc/slabinfo`
تجزیه‌کنندهٔ فایل `/proc/softirqs`.TP --proc-stat تجزیه‌کننده فایل `/proc/stat`
تجزیه‌کننده فایل `/proc/swaps`
تجزیه‌کننده فایل `/proc/uptime`
تجزیه‌کننده فایل `/proc/version`
تجزیه‌کننده فایل `/proc/vmallocinfo`
تجزیه‌کننده فایل `/proc/vmstat`
تجزیه‌کننده فایل `/proc/zoneinfo`
تجزیه‌کننده فایل `/proc/driver/rtc`
تجزیه‌کننده فایل `/proc/net/arp`
تجزیه‌کننده فایل `/proc/net/dev`
تجزیه‌کننده فایل `/proc/net/dev_mcast`
تجزیه‌کننده فایل `/proc/net/if_inet6`
تجزیه‌کننده فایل `/proc/net/igmp`
تجزیه‌کننده فایل `/proc/net/igmp6`
تجزیه‌کننده فایل `/proc/net/ipv6_route`
تجزیه‌کننده فایل `/proc/net/netlink`
تجزیه‌کننده فایل `/proc/net/netstat`
تجزیه‌کننده فایل `/proc/net/packet`
تجزیه‌کننده فایل `/proc/net/protocols`
تجزیه‌کننده فایل `/proc/net/route`
تجزیه‌کننده فایل‌های `/proc/net/tcp` و `/proc/net/tcp6`
تجزیه‌کننده فایل `/proc/net/unix`
تجزیه‌کننده فایل `/proc/<pid>/fdinfo/<fd>`
تجزیه‌کننده فایل `/proc/<pid>/io`
تجزیه‌کننده فایل `/proc/<pid>/maps`
تجزیه‌کننده فایل `/proc/<pid>/mountinfo`
تجزیه‌کننده فایل `/proc/<pid>/numa_maps`
تجزیه‌کننده فایل `/proc/<pid>/smaps`
تجزیه‌کننده فایل `/proc/<pid>/stat`
تجزیه‌کننده فایل `/proc/<pid>/statm`
تجزیه‌کننده فایل `/proc/<pid>/status`
تجزیه‌کننده دستور `ps`
تجزیه‌کننده فایل `/etc/resolve.conf`
تجزیه‌کننده دستور `route`
تجزیه‌کننده دستور `route print`
تجزیه‌کننده دستور `rpm -qi`.TP --rsync تجزیه‌کننده دستور `rsync`
تجزیه‌کننده جریانی دستور `rsync`
تجزیه‌کننده رشته Semantic Version
تجزیه‌کننده دستور `sfdisk`
تجزیه‌کننده فایل `/etc/shadow`
تجزیه‌کننده فایل SRT
تجزیه‌کننده دستور `ss`
تجزیه‌کننده فایل پیکربندی `ssh` و دستور `ssh -G`
تجزیه‌کننده فایل پیکربندی `sshd` و دستور `sshd -T`
تجزیه‌کننده دستور `stat`
تجزیه‌کننده جریانی دستور `stat`
تجزیه‌کننده دستور `swapon`
تجزیه‌کننده دستور `sysctl`
تجزیه‌کننده رشته Syslog RFC 5424
تجزیه‌کننده جریانی رشته Syslog RFC 5424
تجزیه‌کننده رشته Syslog RFC 3164
تجزیه‌کننده جریانی رشته Syslog RFC 3164
تجزیه‌کننده دستور `systemctl`
تجزیه‌کننده دستور `systemctl list-jobs`
تجزیه‌کننده دستور `systemctl list-sockets`
تجزیه‌کننده دستور `systemctl list-unit-files`
تجزیه‌کننده دستور `systeminfo`
تجزیه‌کننده دستور `/usr/bin/time`
تجزیه‌کننده دستور `timedatectl status`
تجزیه‌کننده رشته برچسب زمان Unix Epoch
تجزیه‌کننده فایل TOML
تجزیه‌کننده دستور `top -b`
تجزیه‌کننده جریانی دستور `top -b`
تجزیه‌کننده دستورهای `tracepath` و `tracepath6`
تجزیه‌کننده دستورهای `traceroute` و `traceroute6`
تجزیه‌کننده جریانی دستورهای `traceroute` و `traceroute6`
تجزیه‌کننده فایل TSV
تجزیه‌کننده فایل TSV با سرآیند ضمنی
تجزیه‌کننده جریانی فایل TSV
تجزیه‌کننده جریانی فایل TSV با سرآیند ضمنی
تجزیه‌کننده دستور `tune2fs -l`.TP --typeset تجزیه‌گر دستورهای `typeset` و `declare`
تجزیه‌گر دستور `udevadm info`
تجزیه‌گر دستور `ufw status`
تجزیه‌گر دستور `ufw app info [application]`
تجزیه‌گر دستور `uname -a`
تجزیه‌گر دستور `update-alternatives --get-selections`
تجزیه‌گر دستور `update-alternatives --query`
تجزیه‌گر دستور `upower`
تجزیه‌گر دستور `uptime`
تجزیه‌گر رشته URL
تجزیه‌گر رشته نسخه
تجزیه‌گر دستور `veracrypt`
تجزیه‌گر دستور `vmstat`
تجزیه‌گر جریانی دستور `vmstat`
تجزیه‌گر دستور `w`
تجزیه‌گر دستور `wc`
تجزیه‌گر دستور `wg show`
تجزیه‌گر دستور `who`
تجزیه‌گر فایل‌های گواهی X.509 با قالب PEM و DER
تجزیه‌گر فایل‌های فهرست ابطال گواهی (CRL) با ساختار X.509 PEM و DER
تجزیه‌گر فایل‌های درخواست گواهی (CSR) با ساختار X.509 PEM و DER
تجزیه‌گر فایل‌های XML
تجزیه‌گر دستور `xrandr`
تجزیه‌گر فایل‌های YAML
تجزیه‌گر دستور `zipinfo`
تجزیه‌گر دستور `zpool iostat`
تجزیه‌گر دستور `zpool status`

گزینه‌ها:

درباره jc (خروجی JSON یا YAML)
اجبار به خروجی رنگی حتی هنگام استفاده از لوله‌ها (بر -m و متغیر محیطی NO_COLOR اولویت دارد)
اشکال‌زدایی - نمایش ردگیری اشکال (traceback) (برای ردگیری با جزئیات بیشتر از -dd استفاده کنید)
راهنما (--help --parser_name برای مستندات تجزیه‌گر). برای نمایش تجزیه‌گرهای پنهان دو بار استفاده کنید (مانند -hh). برای نمایش دسته‌بندی‌های تجزیه‌گر سه بار استفاده کنید (مانند -hhh).
خروجی تک‌رنگ
افزودن فراداده به خروجی شامل برچسب زمان، نام تجزیه‌گر، دستور جادویی، کد خروج دستور جادویی و غیره.
خروجی با قالب‌بندی زیبا (pretty-print)
حالت بی‌صدا. سرکوب پیام‌های هشدار تجزیه‌گر (از -qq برای نادیده گرفتن خطاهای تجزیه‌گر جریانی استفاده کنید)
خروجی خام. ارائه خروجی تحت‌اللفظی‌تر، معمولاً با مقادیر رشته‌ای و بدون پردازش معنایی اضافی.TP -s, --slurp بلعیدن (slurp) چند خط در یک آرایه. (برای یافتن تجزیه‌کننده‌های سازگار از -hhh استفاده کنید)
غیرفعال کردن بافر خروجی (مفید برای داده‌های جاریِ کُند با تجزیه‌کننده‌های جریانی)
اطلاعات نسخه
خروجی YAML
تولید اسکریپت تکمیل خودکار پوسته Bash
تولید اسکریپت تکمیل خودکار پوسته Zsh

برش (Slice):

برش خطوط با استفاده از نحوِ START:STOP مشابه با قابلیت برش‌دهی (slicing) در 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 شامل نمی‌شود (non-inclusive). برش‌های مثبت از اولین خط ورودی به سمت انتها شمارش می‌کنند که با 0 به عنوان اولین خط شروع می‌شود. برش‌های منفی از آخرین خط به سمت ابتدا شمارش می‌کنند که با -1 به عنوان آخرین خط شروع می‌شود. این قابلیت دقیقاً مشابه نحوه کارکرد ویژگی برش‌دهی در Python است.

در اینجا جزئیات گزینه‌های برش خطی آورده شده است:

خطوط START تا STOP - 1
خطوط START تا انتهای خروجی
:STOP
خطوط از ابتدا تا STOP - 1
از START خط مانده به انتها تا STOP - 1
خطوط START تا STOP خط مانده به انتها
از START خط مانده به انتها تا STOP خط مانده به انتها
از START خط مانده به انتها تا انتهای خروجی
:-STOP
خطوط از ابتدا تا STOP خط مانده به انتها
:
تمامی خطوط.SH "یکجاخوانی (SLURP)" برخی تجزیه‌کننده‌ها از ورودی‌های چندگانه پشتیبانی می‌کنند و می‌توانند در یک گذر، آرایه‌ای از نتایج را تولید کنند. یکجاخوانی (Slurping) برای تجزیه‌کننده‌های رشته‌ای که ورودی تک‌خطی می‌پذیرند کار می‌کند (مانند url و ip-address). برای مشاهدهٔ فهرست تجزیه‌کننده‌هایی که از گزینهٔ --slurp پشتیبانی می‌کنند، از jc -hhh استفاده کنید.

برای مثال، می‌توانید فایلی شامل چندین نشانی IP (هر کدام در یک خط) را به همراه گزینهٔ --slurp به jc ارسال کنید تا آرایه‌ای از نتایج در خروجی تولید شود:

$ 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 = 0، کد خروج jc = 0، کد خروج ترکیبی = 0 (بدون خطا)

کد خروج ifconfig = 1، کد خروج jc = 0، کد خروج ترکیبی = 1 (خطا در ifconfig)

کد خروج ifconfig = 0، کد خروج jc = 100، کد خروج ترکیبی = 100 (خطا در jc)

کد خروج ifconfig = 1، کد خروج jc = 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، cyan، gray، 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 و غیره) که بلافاصله پس از دریافت داده‌ها از STDIN، پردازش و خروجی دادن خط‌به‌خط داده‌ها را به صورت JSON Lines (معروف به NDJSON) آغاز می‌کنند. این قابلیت می‌تواند میزان حافظهٔ مورد نیاز برای تجزیهٔ حجم بالایی از خروجی دستورها (مانند ls -lR /) را به طور چشمگیری کاهش داده و گاهی داده‌ها را سریع‌تر پردازش کند. تجزیه‌کننده‌های جریانی رفتاری کمی متفاوت با تجزیه‌کننده‌های استاندارد دارند که در ادامه شرح داده شده است.

نکته: تجزیه‌کننده‌های جریانی را نمی‌توان با نحو «جادویی» (magic syntax) استفاده کرد.

نادیده‌گرفتن خطاها

شاید بخواهید هنگام استفاده از تجزیه‌کننده‌های جریانی، از خطاهای تجزیه چشم‌پوشی کنید؛ چرا که ممکن است این تجزیه‌کننده‌ها در خط‌لوله‌های پردازشی طولانی‌مدت به کار روند و بروز خطا می‌تواند ارتباط خط‌لوله (pipe) را قطع کند. برای نادیده گرفتن خطاهای تجزیه، از گزینهٔ -qq در خط فرمان استفاده کنید. این کار یک شیء _jc_meta با ویژگی success به خروجی JSON اضافه می‌کند. اگر مقدار 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"
  }
}
غیرفعال‌سازی بافر خروجی

بیشتر سیستم‌عامل‌ها خروجی‌ای را که از فرآیندی به فرآیند دیگر هدایت (pipe) می‌شود، در بافر قرار می‌دهند. این بافر معمولاً حدود ۴ کیلوبایت است. هنگام مشاهدهٔ خروجی در پایانه (ترمینال)، بافر سیستم‌عامل درگیر نمی‌شود و خروجی بلافاصله روی صفحه نمایش داده می‌شود. با این حال، هنگام هدایت چندین فرآیند به یکدیگر از طریق pipe، اگر سرعت ورودی داده‌ها بسیار پایین باشد (مانند ping)، ممکن است به نظر برسد خروجی متوقف شده است:

$ ping 1.1.1.1 | jc --ping-s | jq
<slow output>

این موضوع به این دلیل است که سیستم‌عامل در این مثال بافر ۴ کیلوبایتی را بین jc و jq فعال می‌کند. برای نمایش بی‌درنگ داده‌ها در پایانه، می‌توانید با استفاده از گزینهٔ -u (نامنباز / unbuffer) در خط فرمان، بافر را غیرفعال کنید:

$ ping 1.1.1.1 | jc --ping-s -u | jq
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64",...}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64",...}
etc...

نکته: خروجی بدون بافر ممکن است در جریان‌های داده‌ای بزرگ سرعت کمتری داشته باشد. افزونه‌های تجزیه‌کننده می‌توانند در پوشهٔ jc/jcparsers در «دایرکتوری داده‌های برنامه» محلی شما قرار گیرند:

- Linux/unix: $HOME/.local/share/jc/jcparsers
- macOS: $HOME/Library/Application Support/jc/jcparsers
- Windows: $LOCALAPPDATA\jc\jc\jcparsers

افزونه‌های تجزیه‌کننده فایل‌های ماژول استاندارد python هستند. از تجزیه‌کنندهٔ jc/parsers/foo.py یا jc/parsers/foo_s.py (جریانی) به عنوان الگو استفاده کنید و به سادگی یک فایل .py را در زیرپوشهٔ jcparsers قرار دهید. هرگونه وابستگی را می‌توان در پوشهٔ jc بالاتر از jcparsers قرار داد و در کد تجزیه‌کننده وارد (import) کرد.

نام فایل‌های افزونه‌های تجزیه‌کننده باید نام‌های معتبر ماژول python باشند و بنابراین باید با یک حرف شروع شده و تنها شامل حروف و ارقام و خط زیر (_) باشند. افزونه‌های محلی می‌توانند جایگزین تجزیه‌کننده‌های پیش‌فرض شوند.

نکته: دایرکتوری داده‌های برنامه از XDG Base Directory Specification پیروی می‌کند.

تنظیمات محلی (Locale)

برای دریافت بهترین نتیجه، با ویرایش متغیر LC_ALL متغیرهای محیطی locale را روی C یا en_US.UTF-8 تنظیم کنید:

$ LC_ALL=C date | jc --date

همچنین می‌توانید متغیرهای locale را به صورت جداگانه تنظیم کنید:

$ export LANG=C

$ export LC_NUMERIC=C

در برخی از سیستم‌های قدیمی‌تر، اگر locale با مقدار C از کدگذاری UTF-8 پشتیبانی نکند، خروجی UTF-8 با توالی‌های گریز \u به ASCII تقلیل خواهد یافت.

منطقه‌های زمانی (Timezones)

برخی از تجزیه‌کننده‌ها دارای فیلدهای برچسب زمان (timestamp) محاسبه‌شدهٔ epoch هستند که به خروجی اضافه شده‌اند. مگر اینکه نام فیلد برچسب زمان دارای پسوند _utc باشد، در غیر این صورت ناآگاه از منطقهٔ زمانی (naive) در نظر گرفته می‌شود (یعنی بر اساس منطقهٔ زمانی محلی سیستمی است که تجزیه‌کنندهٔ jc روی آن اجرا شده است).

اگر یک منطقهٔ زمانی UTC در متن خروجی دستور تشخیص داده شود، برچسب زمان آگاه از منطقهٔ زمانی بوده و پسوند _utc در نام کلید خواهد داشت. (مانند epoch_utc). هیچ منطقهٔ زمانی دیگری برای برچسب‌های زمانی آگاه پشتیبانی نمی‌شود.

نحو استاندارد:

$ dig www.google.com | jc -p --dig

$ cat /proc/meminfo | jc --pretty --proc

نحو جادویی (Magic Syntax):

$ jc --pretty dig www.google.com

$ jc --pretty /proc/meminfo

برش خطوط (Line Slicing):

$ cat file.csv | jc :101 --csv # parse first 100 lines

برای مستندات تجزیه‌کننده:

$ jc --help --dig

راهنمایی بیشتر:

$ jc -hh # show hidden parsers

$ jc -hhh # list parsers by category tags Kelly Brazil (kellyjonbrazil@gmail.com)

https://github.com/kellyjonbrazil/jc

حق نشر (c) 2019-2026 Kelly Brazil

مجوز: مجوز MIT

2026-06-18 1.25.7