رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش جامع تبدیل و پردازش داده‌های 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 در اوبونتو

 
sudo apt update sudo apt install jq

بررسی نصب

 
jq --version

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

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

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

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

 
nano seaCreatures.json

محتوا:

 
[ { "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 جدید

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

 
jq '{ creatures: map(.name), totalClams: map(.clams) | add, totalDolphinClams: map(select(.type == "dolphin").clams) | add }' seaCreatures.json

خروجی نهایی

 
{ "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

 
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

 
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 بلد نیستید، دارید سخت‌ترین راه ممکن را انتخاب می‌کنید.