عارض JSON في Bash — jless & JQ_COLORS

·Platform Engineer·مراجعة بواسطةNadia Okonkwo·نُشر

استخدم مُجمِّل JSON المجاني مباشرةً في متصفحك — لا حاجة للتثبيت.

جرّب مُجمِّل JSON أونلاين ←

عندما تحتاج إلى عارض JSON في bash للاستكشاف التفاعلي بدلاً من البرمجة النصية، يقصر الأسلوب المعياري jq . — تتمرر المخرجات إلى أعلى الطرفية ولا توجد طريقة للتنقل عبر استجابة API مكونة من 300 سطر. يغطي هذا الدليل الأدوات المصممة خصيصاً لعرض JSON بشكل تفاعلي في الطرفية: jless (شجرة قابلة للطي مع التنقل بمفاتيح vim)، JQ_COLORS لنظم الألوان المخصصة، jq -C | less -R للتصفح الملوّن، والأسماء المستعارة في الـ shell للاستخدام اليومي، و fx كبديل Node.js. للبرمجة النصية وسير عمل CI/CD والتحقق، راجع دليل تنسيق JSON في Bash المرافق. للحصول على عارض متصفح بدون تثبيت، تعمل أداة مُجمِّل JSON فوراً. تم اختبار الأمثلة على Bash 5.x (macOS عبر Homebrew، Ubuntu 22.04+) وهي متوافقة مع Bash 3.2+ (shell النظام على macOS).

النقاط الرئيسية
  • jless — أفضل عارض JSON تفاعلي للطرفية: شجرة قابلة للطي، مفاتيح vim، بحث تدريجي
  • jq -C . | less -R — مُقلِّب ملوّن قابل للتمرير بدون تثبيت إضافي سوى jq
  • JQ_COLORS — متغير بيئة يخصص نظام ألوان ANSI لـ jq لكل نوع JSON
  • fx — عارض JSON تفاعلي مبني على Node.js مع دعم الماوس وتعبيرات JavaScript
  • alias jv='jless' — أمر من كلمة واحدة يجعل العرض التفاعلي عادة يومية

العرض التفاعلي مقابل العرض البرمجي لـ JSON

تمرير JSON إلى jq . هو الخيار الصحيح عندما تريد مخرجات منسقة لحمولة صغيرة، أو عندما تُغذّي النتيجة أمراً آخر. لكنه الخيار الخاطئ عندما تحتاج إلى استكشاف استجابة API مكونة من 200 حقل — تطير المخرجات عبر نافذة الطرفية وتتركك بدون طريقة للتنقل أو طي الأقسام أو البحث عن حقل محدد دون إعادة تشغيل الأمر بمرشح. تعرض عارضات JSON التفاعلية نفس المخرجات المنسقة والملونة داخل مُقلِّب ثابت حيث تتحكم في التنقل. البيانات متطابقة؛ الفرق هو الواجهة.

After · Bash
Before · Bash
# jless — opens an interactive pager, nothing scrolls off
curl -s https://api.github.com/users/torvalds | jless
# Full document visible, collapsible, searchable with j/k/h/l
# jq . — output scrolls off screen for large responses
curl -s https://api.github.com/users/torvalds | jq .
# 300+ lines scroll past — you lose context immediately
ملاحظة:العارضات التفاعلية مخصصة للفحص البشري فقط — يجب ألا تظهر أبداً في السكريبتات أو خطوط أنابيب CI أو الأتمتة. للمعالجة البرمجية لـ JSON، استخدم jq مع مرشحات صريحة ومعالجة رمز الخروج. يغطي دليل تنسيق JSON في Bash تلك الأنماط البرمجية.

jless — العارض التفاعلي لـ JSON

jless هو عارض JSON مخصص للطرفية. على عكس أنبوب jq البسيط، يعرض المستند كشجرة ثابتة قابلة للطي: يمكن توسيع أو طي كل كائن ومصفوفة بشكل مستقل باستخدام l و h، يستخدم التنقل مفاتيح vim، والبحث التدريجي يعثر على أي مفتاح أو قيمة فوراً. يُدفق المدخلات بشكل تدريجي، لذا يفتح الملفات الكبيرة واستجابات API في أقل من ثانية بغض النظر عن الحجم — حيث يخزن jq المستند بأكمله مؤقتاً قبل عرض أي شيء. أصل إلى jless كأداة أولى كلما كانت استجابة API كبيرة جداً للمسح دفعة واحدة.

التثبيت

Bash
# macOS
brew install jless

# Linux — prebuilt binary from GitHub Releases
curl -sL https://github.com/PaulJuliusMartinez/jless/releases/latest/download/jless-x86_64-unknown-linux-gnu.tar.gz \
  | tar xz
sudo mv jless /usr/local/bin/

# Verify
jless --version

الاستخدام الأساسي

Bash
# Open a local file — interactive tree viewer launches immediately
jless api-response.json

# Pipe any JSON stream directly into jless
curl -s https://api.github.com/users/torvalds | jless

# Open with all nodes collapsed to top level (useful starting point for large documents)
jless --mode line api-response.json

# Load a specific array element and view it in isolation
jq '.[0]' deployments.json | jless

التنقل والبحث في التطبيق العملي

Bash
# Inside jless:
#
#   j / ↓        move down
#   k / ↑        move up
#   l / →        expand node (or Enter)
#   h / ←        collapse node
#   H            collapse current + all siblings → high-level overview
#   L            expand everything recursively
#
#   /            start forward search — type a key name and press Enter
#   n / N        next / previous search match
#
#   g / gg       jump to start
#   G            jump to end
#   q            quit

مرجع اختصارات لوحة مفاتيح jless

جميع الاختصارات متاحة فور فتح jless — لا يلزم أي تكوين. نموذج التنقل متطابق عمداً مع vim حتى تنتقل الذاكرة العضلية الحالية بسلاسة.

المفتاح
الإجراء
متى تستخدمه
j / ↓
تحريك المؤشر لأسفل سطراً واحداً
التنقل بين مفاتيح الكائنات أو عناصر المصفوفة
k / ↑
تحريك المؤشر لأعلى سطراً واحداً
العودة إلى حقل سابق
J
التحرك لأسفل 5 أسطر
التمرير السريع عبر مصفوفات طويلة
K
التحرك لأعلى 5 أسطر
التنقل السريع للأعلى
h / ← / -
طي العقدة الحالية
إخفاء كائن متداخل كبير لتقليل التشتت
l / → / +
توسيع العقدة الحالية
فتح كائن أو مصفوفة مطوية
H
طي العقدة الحالية وجميع الأشقاء
الحصول على نظرة عامة على البنية من المستوى الأعلى
L
توسيع جميع العقد بشكل تكراري
الكشف عن العمق الكامل للبنية المتداخلة
g
الانتقال إلى بداية المستند
العودة إلى الجذر بسرعة
G
الانتقال إلى نهاية المستند
القفز إلى العنصر الأخير في مصفوفة كبيرة
/
بدء بحث للأمام
البحث عن مفتاح أو قيمة محددة في المستند
?
بدء بحث للخلف
البحث للأعلى من الموضع الحالي
n
الانتقال إلى نتيجة البحث التالية
التنقل عبر جميع تكرارات مصطلح البحث
N
الانتقال إلى نتيجة البحث السابقة
التنقل للخلف عبر نتائج البحث
q
إنهاء jless
الخروج بعد اكتمال الفحص

jq -C | less -R — التصفح الملوّن بدون أدوات إضافية

إذا لم يكن jless مثبتاً وتحتاج إلى عرض ملوّن قابل للتمرير لاستجابة JSON، jq -C . | less -R هو بديل قادر. يُجبر العلم -C رموز الألوان ANSI حتى عندما يكون stdout أنبوباً (عادةً يُزيلها jq)، و -R يخبر less بتصيير تلك الرموز بدلاً من طباعتها كنص حرفي. النتيجة مستند ملوّن بالكامل وقابل للتمرير — بدون بنية الشجرة التفاعلية لـ jless. يستخدم التنقل داخل less مفاتيح الأسهم أو مفاتيح vim j/k، و / يُشغّل بحث النص المدمج في less.

Bash
# Basic colorized pager
jq -C . response.json | less -R

# From a curl response — -s prevents progress bar from corrupting the JSON stream
curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R

# Sort keys for easier visual scanning, then page
jq -CS . config.json | less -R
# -C = force color, -S = sort keys (both flags combined)

# Add an alias so you never have to type the full pipe again
alias jqv='jq -C . | less -R'
# Usage: cat response.json | jqv
#    or: curl -s https://api.example.com/status | jqv
ملاحظة:jq -C | less -R يخزن المخرجات المنسقة بالكامل مؤقتاً قبل أن يتمكن less من عرضها. على ملف بحجم 200 ميغابايت هذا يعني الانتظار عدة ثوانٍ واستهلاك ذاكرة كبيرة — نفس القيد مثل jq . البسيط. للملفات الكبيرة، استخدم jless بدلاً من ذلك لأنه يُدفق بشكل تدريجي.

JQ_COLORS — نظم الألوان المخصصة

JQ_COLORS هو متغير بيئة يُجاوز نظام ألوان ANSI الافتراضي لـ jq. يأخذ سلسلة مفصولة بنقطتين من سبعة رموز سمة ANSI؛لون، رمز واحد لكل نوع JSON بهذا الترتيب الثابت: null : false : true : أرقام : نصوص : مصفوفات : كائنات. كل رمز بتنسيق سمة;لون حيث السمة هي 0 (عادي)، 1 (غامق)، 2 (خافت)، أو 4 (مسطّر)، واللون هو رقم لون ANSI قياسي (30–37 = قياسي، 90–97 = ساطع).

Bash
# ANSI color reference for building JQ_COLORS:
#   Attributes:  0=normal  1=bold  2=dim  4=underline
#   Colors:      30=black  31=red  32=green  33=yellow
#                34=blue   35=magenta  36=cyan  37=white
#   Bright:      90=bright-black  91=bright-red  92=bright-green  93=bright-yellow
#                94=bright-blue  95=bright-magenta  96=bright-cyan  97=bright-white
#
# Order: null : false : true : numbers : strings : arrays : objects

# High-contrast theme for dark terminals (recommended)
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=dim-gray, false=bright-red, true=bright-green,
# numbers=bright-yellow, strings=green, arrays=bold-cyan, objects=bold-cyan

# Solarized-style theme
export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34"
# null=dim-white, false=magenta, true=magenta,
# numbers=cyan, strings=yellow, arrays=bold-blue, objects=bold-blue

# Minimal (bold keys only, everything else plain)
export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
Bash
# Add your chosen theme to ~/.bashrc or ~/.zshrc so it applies to every jq call
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc

# Test the theme
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .
تحذير:يجب أن يحتوي JQ_COLORS على سبعة قيم مفصولة بنقطتين بالضبط. إذا كان للسلسلة عدد أقل من الشرائح، يعود jq بصمت إلى إعداداته المدمجة الافتراضية بدون أي رسالة خطأ — مما يجعل التكوين الخاطئ صعب التشخيص. اختبر دائماً سلسلة ألوان جديدة على حمولة JSON قصيرة قبل إضافتها إلى ملف تعريف shell.

الأسماء المستعارة في Shell لعرض JSON اليومي

أوامر العرض التفاعلي لـ JSON مطوّلة بشكل افتراضي. مجموعة صغيرة من الأسماء المستعارة في ~/.bashrc أو ~/.zshrc تجعل jless والتصفح الملوّن أوامر بكلمة واحدة تندمج بشكل طبيعي في أي سير عمل. الأسماء المستعارة أدناه قابلة للتركيب — كل من jv و jvp تقبل مدخلات مُمرّرة أو اسم ملف كأول وسيطة.

Bash
# Add to ~/.bashrc or ~/.zshrc

# jv — interactive viewer (jless if available, colorized pager fallback)
jv() {
  if command -v jless &>/dev/null; then
    jless "$@"
  else
    jq -C . "$@" | less -R
  fi
}

# jvp — view with keys sorted alphabetically (useful for comparing responses)
alias jvp='jq -CS . | less -R'

# jvc — view from clipboard (macOS)
alias jvc='pbpaste | jless'

# jvf — view and filter: jvf '.users[0]' response.json
jvf() {
  local filter="$1"; shift
  jq -C "$filter" "$@" | less -R
}

# Reload without restarting terminal
source ~/.bashrc
Bash
# Usage examples after adding aliases above

# View any file or piped response
jv deployment-config.json
curl -s https://api.github.com/users/torvalds | jv

# View sorted (easy to scan alphabetically)
cat feature-flags.json | jvp

# Drill into a sub-document interactively
jvf '.database' infra/app-config.json
jvf '.users[] | select(.role == "admin")' users.json

bat — عرض ملفات JSON مع تمييز الصياغة

bat هو بديل لـ cat مع تمييز الصياغة وأرقام الأسطر ومُقلِّب مدمج. بالنسبة لملفات JSON على القرص توفر تجربة قراءة نظيفة بأسلوب المحرر بدون فتح محرر نصوص كامل. على عكس jless، يُصيّر bat الملف كنص ثابت — لا طي، لا بحث، لا تنقل غير التمرير. قوته في الوضوح البصري للملفات الثابتة متوسطة الحجم (ملفات التكوين، البيانات الثابتة، حمولات الاختبار) حيث تريد ألوان الصياغة وأرقام الأسطر لكنك لا تحتاج إلى تنقل تفاعلي في الشجرة.

Bash
# macOS
brew install bat

# Debian / Ubuntu (binary may be named batcat)
apt-get install -y bat
# alias bat=batcat   # add to ~/.bashrc if needed on Ubuntu

# View a JSON file with syntax highlighting and line numbers
bat config/feature-flags.json

# Disable pager — print directly to terminal (useful in scripts)
bat --paging=never api-response.json

# Combine with jq: format with jq, view with bat (preserves bat's JSON highlighting)
jq '.' response.json | bat --language=json --paging=never
ملاحظة:استخدم bat لقراءة ملفات التكوين الثابتة وبيانات الاختبار الثابتة حيث تهم أرقام الأسطر (مثلاً عندما يُشير فشل اختبار إلى السطر 47 من ملف بيانات ثابت). لاستجابات API وJSON الديناميكي من curl، jless أسرع في الفتح وأكثر عملية في التنقل. إذا كنت بحاجة إلى العرض في المتصفح ومشاركته مع زميل، الصقه مباشرةً في أداة مُجمِّل JSON — لا طرفية مطلوبة.

fx — مستكشف JSON التفاعلي على Node.js

fx هو عارض JSON تفاعلي مبني على Node.js. واجهته مشابهة لـ jless — شجرة قابلة للطي، تنقل بلوحة المفاتيح، بحث — لكنه يضيف ميزتين تفتقر إليهما jless: دعم الماوس (النقر للتوسيع/الطي) والقدرة على كتابة تعبير JavaScript في الشريط السفلي لتصفية المستند في الوقت الفعلي. للفرق التي تشغّل Node.js بالفعل، fx مناسب طبيعياً ولا يتطلب ملفاً ثنائياً منفصلاً. للبيئات الطرفية البحتة بدون Node، jless هو الاختيار الأخف.

Bash
# Install globally via npm
npm install -g fx

# Or run without installing (npx caches the package)
curl -s https://api.github.com/users/torvalds | npx fx

# Basic interactive use
fx api-response.json
curl -s https://api.github.com/repos/jqlang/jq | fx

# In fx: arrow keys navigate, Enter expands/collapses, / searches
# Bottom bar accepts JavaScript expressions for live filtering:
#   .name           → show only the "name" field
#   .repos.slice(0,5) → first 5 repos
Bash
# fx also works as a non-interactive formatter (like jq . but with JS syntax)
# Pass a JavaScript expression as argument — no interactive mode
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
  | fx '.users[0].name'
# Sarah Chen

# Chain with map for array transformations
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'

الأخطاء الشائعة

تظهر هذه الأخطاء الأربعة بشكل متكرر عندما يبدأ المطورون في استخدام عارضات JSON للطرفية لأول مرة — لكل خطأ حل واضح بمجرد فهم سبب حدوثه.

استخدام jq . لعرض استجابات كبيرة (المخرجات تتمرر عن الشاشة)

المشكلة: يُفرغ jq . جميع المخرجات إلى stdout دفعة واحدة. بالنسبة للاستجابات الأطول من ارتفاع الطرفية، كل شيء فوق آخر شاشة يختفي — لا يمكنك التمرير للخلف إلى البداية أو التنقل إلى حقل محدد.

الحل: مرّر إلى jless للتنقل التفاعلي، أو استخدم jq -C . | less -R كبديل. كلاهما يُبقي المستند الكامل متاحاً بغض النظر عن حجمه.

After · Bash
Before · Bash
# Full document stays accessible in jless — nothing is lost
curl -s https://api.github.com/users/torvalds | jless
# j/k to scroll, h/l to collapse/expand, / to search
# 300-line API response — top 280 lines immediately scroll off
curl -s https://api.github.com/users/torvalds | jq .
# Only the bottom of the output is visible — cannot navigate back
تعيين JQ_COLORS بعدد خاطئ من الشرائح

المشكلة: يتطلب JQ_COLORS بالضبط سبع قيم مفصولة بنقطتين. إذا كان للسلسلة ست أو ثماني قيم، يتجاهل jq المتغير بصمت ويعود إلى إعداداته الافتراضية المدمجة — لا تحذير، لا خطأ، فقط ألوان خاطئة.

الحل: عدّ النقطتين: سلسلة JQ_COLORS صالحة تحتوي على بالضبط ست نقطتين وسبع قيم. أخرج المتغير ومرّره إلى tr للعدّ.

After · Bash
Before · Bash
# Exactly 7 values — 6 colons
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"

# Verify the count before adding to shell profile
echo "$JQ_COLORS" | tr -cd ':' | wc -c   # must output 6
# Only 6 values — jq silently uses defaults, no indication of why
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq .  # colors unchanged — no error shown
تمرير مخرجات jless أو fx إلى أمر آخر

المشكلة: يُصيّر jless وfx واجهتهما التفاعلية إلى الطرفية (TTY)، وليس إلى stdout. تمرير أيٍّ منهما إلى grep أو tee أو أي أمر آخر ينتج رموز ANSI مشوشة أو مخرجات فارغة — مخرجات العارض التفاعلية غير مصممة لاستهلاكها من قِبل برامج أخرى.

الحل: استخدم jq مع مرشح صريح لاستخراج البيانات برمجياً. استخدم jless وfx فقط كخطوة نهائية في أنبوب عندما يقرأ إنسان المخرجات.

After · Bash
Before · Bash
# Use jq for programmatic extraction — clean, composable
jq -r '.request_id' response.json | grep "req_"

# Use jless only as the terminal endpoint — nothing after it
jless response.json
# jless output is for human eyes — piping it produces garbage
jless response.json | grep "request_id"
# Output: ANSI escape codes and cursor sequences, not clean text
استخدام jq -C بدون less -R (رموز الألوان تطبع كنص حرفي)

المشكلة: -C يجبر رموز ألوان ANSI في تدفق المخرجات. عندما يُطبع هذا التدفق مباشرةً على طرفية ليست في الوضع الخام — أو يُمرر إلى أداة لا تفسر ANSI — تظهر تسلسلات الهروب كأحرف حرفية مثل ^[[1;34m مما يُشوش المخرجات.

الحل: اقرن دائماً jq -C مع less -R. العلم -R يضع less في وضع الإدخال الخام، يخبره بتصيير تسلسلات ANSI كألوان بدلاً من طباعتها كنص.

After · Bash
Before · Bash
# -C with -R: ANSI codes are rendered as actual colors
jq -C . response.json | less -R
# Output: colorized JSON, clean and readable
# -C without -R: escape sequences print as raw text
jq -C . response.json | less
# Output: ^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...

jless مقابل jq مقابل bat مقابل fx — مقارنة العارضات التفاعلية

تُصيّر جميع الأدوات الأربع JSON ملوّناً، لكن قدراتها التفاعلية تختلف اختلافاً كبيراً. اختر بناءً على ما إذا كنت تحتاج إلى تنقل قابل للطي أو بحث أو دعم ماوس — وما إذا كان Node.js موجوداً بالفعل في بيئتك.

الأداة
التنقل التفاعلي
البحث
قابل للطي
الألوان
الملفات الكبيرة
التثبيت
jless
✅ vim-keys
✅ (/, n, N)
✅ (h/l keys)
✅ (built-in)
✅ (streaming)
brew / binary
jq -C | less -R
⚠️ (less only)
✅ (/ in less)
✅ (ANSI)
⚠️ (buffers all)
jq only
fx
✅ arrow keys
✅ (/)
⚠️ (JS load)
npm install -g fx
bat
⚠️ (pager only)
❌ (in bat)
✅ (theme)
⚠️ (reads all)
brew / apt
jq . (plain)
❌ (scrolls off)
✅ (tty only)
brew / apt

في معظم الحالات: ثبّت jless مرة واحدة واستخدمه كعارض تفاعلي افتراضي. احتفظ بـ jq -C . | less -R كبديل للبيئات التي لا يمكنك فيها تثبيت ملفات ثنائية إضافية. أضف fx إذا كان فريقك يعمل بـ Node.js أولاً ويقدّر التنقل بالماوس أو التصفية المباشرة بـ JavaScript.

الأسئلة الشائعة

كيف أبحث عن مفتاح محدد داخل ملف JSON في الطرفية؟

في jless، اضغط / لفتح موجه بحث تدريجي، اكتب اسم المفتاح، ثم اضغط Enter. استخدم n للانتقال للأمام بين النتائج وN للتنقل للخلف. البحث حساس لحالة الأحرف بشكل افتراضي. في jq -C | less -R، يُشغّل / بحث less المدمج الذي يطابق النص الخام بما في ذلك رموز ألوان ANSI — بحث jless أكثر موثوقية لـ JSON المنظم.

Bash
# Open file in jless, then press / to search
jless api-response.json
# In jless: type /  →  "request_id"  →  Enter  →  n for next match

# jq alternative: extract and print all matching keys to stdout
jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json

كيف أتنقل في بنية JSON متداخلة بعمق باستخدام اختصارات لوحة المفاتيح؟

يحاكي jless التنقل في vim: j/k للأعلى/الأسفل، h لطي العقدة، l لتوسيعها. اضغط H لطي العقدة الحالية وجميع أشقائها دفعة واحدة — مفيد للحصول على نظرة عامة عالية المستوى قبل الغوص في فرع محدد. L يوسع كل شيء بشكل تكراري. بمجرد طي كل شيء إلى المستوى الأعلى، وسّع فقط المسار الذي تريده باستخدام l.

Bash
# Open the response in jless
curl -s https://api.github.com/repos/jqlang/jq | jless
# In jless:
#   H            → collapse all top-level keys
#   j/k          → navigate to the key you want
#   l            → expand only that branch
#   gg           → return to root
#   G            → jump to last element

كيف أجعل مخرجات jq بالألوان أسهل للقراءة على طرفية داكنة؟

قم بتعيين متغير البيئة JQ_COLORS مع رموز سمة ANSI؛لون لكل نوع JSON. المواضع السبعة بالترتيب هي: null، false، true، أرقام، نصوص، مصفوفات، كائنات. ضع export في ~/.bashrc أو ~/.zshrc لتطبيقه على كل استدعاء لـ jq. الألوان الساطعة الغامقة تعمل بشكل أفضل على الخلفيات الداكنة.

Bash
# High-contrast theme for dark terminals — add to ~/.bashrc or ~/.zshrc
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=gray, false=bright-red, true=bright-green,
# numbers=bright-yellow, strings=green, arrays/objects=bright-cyan

# Test immediately without reloading shell
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .

ما الفرق بين jless وjq . لعرض JSON؟

يقوم jq . بتمرير المخرجات إلى الطرفية دفعة واحدة. بالنسبة للاستجابات الأطول من ارتفاع الطرفية، كل شيء فوق آخر شاشة يختفي — لا يمكنك التمرير للخلف إلى البداية أو التنقل إلى حقل محدد. يعرض jless المستند بأكمله في مُقلِّب تفاعلي حيث يمكنك التمرير والبحث وطي العقد والتنقل باختصارات لوحة المفاتيح دون فقدان السياق. استخدم jq . لإلقاء نظرة سريعة على حمولة صغيرة؛ استخدم jless عندما تحتاج إلى استكشاف.

Bash
# Small payload — jq . is fine
echo '{"status":"ok","version":"2.4.1"}' | jq .

# Large or nested response — jless is better
curl -s https://api.github.com/repos/jqlang/jq | jless
# → interactive tree, no output scrolled off screen

كيف أعرض استجابة JSON من curl بشكل تفاعلي في الطرفية؟

مرر curl مباشرةً إلى jless. أدرج دائماً -s (صامت) لمنع شريط تقدم curl من الظهور في المخرجات. سيفتح jless العارض التفاعلي مع الاستجابة الكاملة معروضة كشجرة قابلة للطي. إذا لم يكن jless مثبتاً، يوفر jq -C . | less -R مُقلِّباً ملوناً كبديل.

Bash
# Interactive exploration with jless
curl -s https://api.github.com/users/torvalds | jless

# Colorized pager fallback (no collapse, but still scrollable with color)
curl -s https://api.github.com/users/torvalds | jq -C . | less -R

هل يمكنني عرض ملفات JSON متعددة جنباً إلى جنب في الطرفية؟

يفتح jless ملفاً واحداً في كل مرة. للمقارنة جنباً إلى جنب، استخدم مضاعف طرفية: tmux split-window -h يفتح انقساماً رأسياً، ثم شغّل jless في كل لوحة مع ملف مختلف. بدلاً من ذلك، استخدم أداة JSON Diff المستندة إلى المتصفح إذا كنت بحاجة إلى مقارنة وثيقتين هيكلياً.

Bash
# tmux side-by-side: split horizontally, then run jless in each pane
tmux split-window -h
# Left pane:  jless response-v1.json
# Right pane: jless response-v2.json

# Or use diff on jq-normalized output for a text diff
diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)

أدوات ذات صلة

توفر لك أداة مُجمِّل JSON نفس العرض القابل للطي والملوّن مثل jless — مباشرةً في المتصفح، بدون تثبيت وبدون طرفية.

CM
Cora MatsumotoPlatform Engineer

Cora is a platform engineer who builds developer tooling and internal platforms, using Bash as the glue that connects components written in different languages and runtimes. She writes about cross-platform shell scripting, Bash utility functions, environment management, configuration templating, and the practical shell techniques that platform engineers use to build self-service tooling for development teams.

NO
Nadia Okonkwoالمراجع التقني

Nadia is a site reliability engineer who lives in the terminal. She writes Bash scripts that process logs, transform data, and orchestrate infrastructure across fleets of servers. She is a heavy user of jq, awk, and sed and writes about shell one-liners, text processing pipelines, data serialisation from the command line, and the practical Bash patterns that SREs reach for when speed matters more than elegance.