رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش جامع تبدیل و پردازش داده‌های JSON با jq

آموزش جامع تبدیل و پردازش داده‌های JSON با jq

jq ابزاری خط فرمانی برای پردازش حرفه‌ای JSON است که استخراج، فیلتر و تبدیل داده‌ها را ساده می‌کند. با jq می‌توان فایل‌های بزرگ، خروجی API، داده‌های Kubernetes و دیتاست‌های ML را بدون مصرف زیاد حافظه مدیریت کرد. این ابزار مناسب DevOps، AI و اسکریپت‌نویسی است و جایگزینی مطمئن برای مدیریت دستی و غیرحرفه‌ای JSON محسوب می‌شود.

مقدمه

کار با فایل‌های JSON بزرگ، مخصوصا در پروژه‌های واقعی، معمولا زود از کنترل خارج می‌شود. داده زیاد است، ساختار تو در توست و اگر بخواهید همه‌چیز را با کپی‌پیست یا اسکریپت‌های دست‌ساز مدیریت کنید، هم زمان از دست می‌رود هم احتمال خطا بالا می‌رود.

ابزارهای کلاسیک لینوکس مثل grep، sed و awk برای متن آزاد عالی هستند، اما وقتی پای داده ساخت‌یافته مثل JSON وسط باشد، این ابزارها دیگر انتخاب حرفه‌ای محسوب نمی‌شوند.

اینجاست که jq وارد می‌شود.

jq یک ابزار خط فرمان برای خواندن، فیلتر کردن و تبدیل JSON است که به‌طور خاص برای داده‌های ماشین‌خوان طراحی شده. این ابزار در اسکریپت‌های شِل، پایپ‌لاین‌های DevOps، پردازش خروجی APIها، Kubernetes و حتی آماده‌سازی داده برای مدل‌های یادگیری ماشین، یک ابزار کلیدی محسوب می‌شود.

در این آموزش از «دیدگاه»، jq را از پایه یاد می‌گیرید و قدم‌به‌قدم به سناریوهای واقعی و حرفه‌ای می‌رسید.


چرا jq مهم است؟

  • JSON را «می‌فهمد»، نه اینکه فقط متن را دستکاری کند

  • بسیار سریع است (با زبان C نوشته شده)

  • می‌تواند فایل‌های چند گیگابایتی را بدون مصرف دیوانه‌وار حافظه پردازش کند

  • برای DevOps، Kubernetes و AI کاملا کاربردی است

  • به‌راحتی در اسکریپت‌ها و CI/CD استفاده می‌شود


نکات کلیدی این آموزش

در این مقاله یاد می‌گیرید:

  • اصول پایه jq و فیلترهای مهم آن

  • استخراج داده از آرایه‌ها و آبجکت‌ها

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

  • ترکیب چند فیلتر در یک دستور

  • بهینه‌سازی jq برای فایل‌های بزرگ

  • استفاده از jq در DevOps، Kubernetes و AI

  • مدیریت خطا و داده‌های ناقص


پیش‌نیازها

برای دنبال‌کردن این آموزش نیاز دارید به:

  • سیستم لینوکس (ترجیحا اوبونتو)

  • آشنایی مقدماتی با JSON

  • نصب jq

نصب jq در اوبونتو

2 خط
sudo apt update
sudo apt install jq
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

بررسی نصب

jq --version
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

قدم اول: اجرای اولین دستور jq

jq می‌تواند ورودی را از فایل یا pipe دریافت کند. در این آموزش از فایل استفاده می‌کنیم.

ساخت فایل نمونه

فایلی به نام seaCreatures.json بسازید:

nano seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

محتوا:

6 خط
[
  { "name": "Sammy", "type": "shark", "clams": 5 },
  { "name": "Bubbles", "type": "orca", "clams": 3 },
  { "name": "Splish", "type": "dolphin", "clams": 2 },
  { "name": "Splash", "type": "dolphin", "clams": 2 }
]
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

تست jq با identity operator

ساده‌ترین فیلتر jq، نقطه (.) است که ورودی را بدون تغییر چاپ می‌کند:

jq '.' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اگر خروجی را بدون خطا دیدید، یعنی jq آماده کار است.
jq به‌صورت پیش‌فرض خروجی را pretty print می‌کند، که برای خواندن JSON عالی است.


قدم دوم: استخراج نام موجودات

برای کار روی عناصر داخل آرایه باید از iterator استفاده کنیم:

jq '.[]' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

حالا برای گرفتن فقط نام‌ها:

jq '.[] | .name' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خروجی به‌صورت JSON string خواهد بود. اگر رشته خام می‌خواهید:

jq -r '.[] | .name' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

قدم سوم: محاسبه مجموع clams

استخراج مقادیر clams

jq '.[] | .clams' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

تبدیل به آرایه

jq '[.[] | .clams]' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

استفاده از map (خواناتر و حرفه‌ای‌تر)

jq 'map(.clams)' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

جمع کل

jq 'map(.clams) | add' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خروجی:

12
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

قدم چهارم: محاسبه clams دلفین‌ها

اینجا باید فقط موجوداتی را انتخاب کنیم که نوعشان dolphin است.

jq 'map(select(.type == "dolphin"))' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

حالا فقط clams آنها:

jq 'map(select(.type == "dolphin").clams)' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

و در نهایت جمع:

jq 'map(select(.type == "dolphin").clams) | add' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خروجی:

4
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

قدم پنجم: ساخت ساختار JSON جدید

حالا همه‌چیز را در یک خروجی تمیز و کاربردی ترکیب می‌کنیم:

5 خط
jq '{
  creatures: map(.name),
  totalClams: map(.clams) | add,
  totalDolphinClams: map(select(.type == "dolphin").clams) | add
}' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خروجی نهایی

5 خط
{
  "creatures": ["Sammy", "Bubbles", "Splish", "Splash"],
  "totalClams": 12,
  "totalDolphinClams": 4
}
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

این دقیقا همان چیزی است که در پروژه‌های واقعی به آن نیاز دارید:
تبدیل داده، نه فقط نمایش آن.


تکنیک‌های پیشرفته jq برای محیط عملیاتی

پردازش فایل‌های بزرگ (۵ گیگابایت به بالا)

استفاده از حالت streaming:

jq --stream 'select(.[0] | length == 2) | .[1]' large.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خروجی فشرده برای مصرف کمتر حافظه

jq -c '.[] | select(.type == "dolphin")' seaCreatures.json
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

استفاده از jq در AI و یادگیری ماشین

آماده‌سازی داده برای مدل ML

4 خط
curl -s api.example.com/data | jq -c '
  select(.quality > 0.8) |
  {features: [.f1, .f2], target: .label}
' > train.jsonl
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

پردازش داده بلادرنگ

tail -f data.log | jq -c 'select(.ready == true)'
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

jq در Kubernetes و DevOps

پردازش خروجی kubectl

3 خط
kubectl get pods -o json |
jq '.items[] | select(.status.phase=="Running") |
{pod: .metadata.name, node: .spec.nodeName}'
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

استفاده در CI/CD

VERSION=$(jq -r '.version' package.json)
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مدیریت خطا و داده ناقص

جلوگیری از خطا در فیلدهای ناموجود

jq '.creatures[]? | {name, clams: (.clams // 0)}'
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اعتبارسنجی ساختار JSON

jq 'if type=="object" then . else error("Invalid JSON") end'
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

جمع‌بندی

jq یکی از آن ابزارهایی است که وقتی درست یادش بگیرید، دیگر حاضر نیستید بدون آن کار کنید.

با jq می‌توانید:

  • JSON را اصولی پردازش کنید

  • داده‌ها را برای DevOps و AI آماده کنید

  • اسکریپت‌های تمیز و قابل نگهداری بنویسید

  • فایل‌های بزرگ را بدون له شدن سیستم مدیریت کنید

دیدگاه توصیه می‌کند:
اگر با JSON سروکار دارید و jq بلد نیستید، دارید سخت‌ترین راه ممکن را انتخاب می‌کنید.

ترکیب jq با اسکریپت‌های Bash ابزاری بسیار قدرتمند برای اتوماسیون پردازش داده می‌سازد.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS