استخدام أمر jq لتحليل بيانات JSON على نظام Linux
تعتبر معالجة بيانات JSON من المهارات الأساسية لمطوري البرمجيات ومديري الأنظمة. يوفر أمر jq أداة قوية ومرنة لتحليل وتعديل بيانات JSON بسهولة وفعالية. مع ارتفاع الاعتماد على JSON في تطبيقات الويب والخدمات السحابية، يصبح من الضروري فهم كيفية استخدام jq لأداء المهام المختلفة بشكل سلس. في هذا المقال، سيتم استكشاف الأوامر الأساسية لـ jq وكيفية استخدامها لتسهيل معالجة البيانات واستخراج المعلومات المهمة منها.
Jq هو برنامج محلل قوي ومرن للغاية يمكنه دفق وتصفية بيانات JSON من الملفات وأنابيب UNIX. ستعلمك هذه المقالة أساسيات jq، وستقدم لك أمثلة على التعليمات البرمجية، بالإضافة إلى بعض التطبيقات البديلة التي يمكنك تثبيتها اليوم.
ما هو استخدام جي كيو؟
أمر jq هو أداة سطر أوامر تُستخدم لمعالجة وتحرير بيانات JSON (JavaScript Object Notation). يُعتبر jq خيارًا شائعًا لمطوري البرمجيات وكتاب السكربتات نظرًا لقدرته على التعامل مع البيانات الهيكلية بسهولة وفعالية. إليك بعض الاستخدامات الرئيسية لـ jq:
- تحليل البيانات: يمكن استخدام jq لاستخراج أجزاء محددة من بيانات JSON، مثل العناصر أو القيم المعينة، مما يسهل فهم البيانات الكبيرة والمعقدة.
- تعديل البيانات: يمكنك استخدام jq لتعديل بيانات JSON، مثل إضافة أو حذف عناصر أو تغيير القيم.
- تنسيق البيانات: jq قادر على تنسيق بيانات JSON بطريقة تجعلها أكثر قراءة، مما يساعد في تحليل البيانات بشكل أفضل.
- تصفية البيانات: يمكن استخدام jq لتصفية البيانات وفقًا لمعايير معينة، مثل الحصول على جميع العناصر التي تحقق شروطًا معينة.
- تحويل البيانات: يمكن استخدام jq لتحويل بيانات JSON إلى تنسيقات أخرى، مثل CSV، مما يسهل استخدامها في تطبيقات أخرى.
- دمج البيانات: jq يمكن أن يُستخدم لدمج بيانات JSON متعددة في ملف واحد، مما يساعد في إدارة البيانات بشكل أفضل.
إجمالًا، يُعد jq أداة قوية ومرنة تجعل التعامل مع بيانات JSON أسهل وأكثر فعالية، خاصة عند العمل مع بيانات كبيرة ومعقدة في بيئات البرمجة أو إدارة الأنظمة.
الاستخدام الأكثر شيوعًا لـ jq هو معالجة استجابات JSON ومعالجتها من واجهات برمجة تطبيقات البرامج كخدمة (SaaS). على سبيل المثال، يمكنك استخدام jq مع cURL للاستفادة من نقاط نهاية API الخاصة بـ Digitalocean للحصول على تفاصيل حسابك.
محطة تعرض نموذج وصول لواجهة برمجة التطبيقات (API) لـ Digitalocean إلى jq.
بصرف النظر عن ذلك، يعد jq أيضًا أداة مساعدة قوية لإدارة ملفات JSON الكبيرة. بعض برامج قواعد البيانات الأكثر شيوعًا اليوم مثل MongoDB وPostgreSQL وMySQL تدعم JSON كوسيلة لتخزين البيانات. على هذا النحو، يمنحك تعلم jq ميزة في فهم كيفية عمل أنظمة قواعد البيانات هذه.
من الجيد أن تعرف: تعرف على بعض أفضل الأدوات لتحرير ملفات JSON داخل Chrome.
تثبيت واستخدام jq
إليك كيفية تثبيت واستخدام jq على أنظمة تشغيل مختلفة:
تثبيت jq
على نظام Windows
- باستخدام Chocolatey:
- افتح موجه الأوامر كمسؤول (Run as Administrator).
- أدخل الأمر التالي:
bash
choco install jq
- تنزيل الملف القابل للتنفيذ:
- يمكنك تنزيل الملف القابل للتنفيذ من مستودع jq على GitHub.
- ضع الملف في أي مجلد في نظامك وأضف ذلك المجلد إلى مسار النظام (PATH).
على نظام macOS
- باستخدام Homebrew:
- افتح تطبيق Terminal.
- أدخل الأمر التالي:
bash
brew install jq
على نظام Linux
- بالنسبة لتوزيعات Debian/Ubuntu:
bash
sudo apt-get install jq
- بالنسبة لتوزيعات Red Hat/Fedora:
bash
sudo dnf install jq
- بالنسبة لتوزيعات Arch Linux:
bash
sudo pacman -S jq
استخدام jq
1. عرض البيانات
لنفترض أن لديك ملف JSON باسم data.json
، يمكنك عرض محتويات هذا الملف باستخدام:
jq . data.json
2. استخراج عنصر معين
إذا كنت ترغب في استخراج عنصر محدد، استخدم:
jq '.key' data.json
على سبيل المثال، إذا كان لديك:
{
"name": "John",
"age": 30
}
يمكنك استخراج الاسم باستخدام:
jq '.name' data.json
3. تنسيق JSON
يمكنك تنسيق بيانات JSON بطريقة تجعلها أكثر قابلية للقراءة باستخدام:
jq '.' data.json
4. تصفية البيانات
لنفترض أن لديك بيانات تحتوي على مصفوفة من العناصر، يمكنك تصفية العناصر بناءً على شرط معين. مثلاً:
[
{ "name": "Alice", "age": 25 },
{ "name": "Bob", "age": 30 }
]
للحصول على العناصر التي عمرها أكبر من 25:
jq '.[] | select(.age > 25)' data.json
5. تعديل البيانات
يمكنك أيضًا تعديل القيم. على سبيل المثال، لتغيير الاسم إلى “Charlie”:
jq '.name = "Charlie"' data.json
jq أداة قوية لمعالجة بيانات JSON من سطر الأوامر، مما يجعلها مفيدة جدًا لمطوري البرمجيات ومديري الأنظمة. من خلال تعلم كيفية استخدام jq، يمكنك تحسين كفاءتك في التعامل مع البيانات بشكل كبير.
للبدء بـ jq، قم بتثبيت الحزمة الثنائية الخاصة به على نظامك:
بعد الانتهاء من الأساسيات والتخلص منها، ستعرض لك الأقسام التالية بعض الحيل التي يمكنك القيام بها باستخدام jq.
من الجيد أن تعرف: تعرف على كيفية التعامل مع تدفقات النص باستخدام sed في Linux.
1. إنشاء قارئ موجز أساسي باستخدام jq
تقدم معظم مواقع الويب الحديثة اليوم نقاط نهاية مفتوحة لواجهة برمجة التطبيقات (API) لقراءة البيانات داخل منصاتها. على سبيل المثال، يحتوي كل مستودع Github على عنوان URL لواجهة برمجة التطبيقات (API) الخاص به لتتمكن من استرداد أحدث الالتزامات والمشكلات الخاصة بهذا المشروع.
محطة تعرض “جدار التعليمات البرمجية” الافتراضي لواجهة برمجة تطبيقات Github.
يمكنك استخدام نقطة نهاية واجهة برمجة التطبيقات (API) مثل هذه مع jq لإنشاء خلاصة بسيطة “تشبه RSS”. للبدء، استخدم cURL لاختبار ما إذا كانت نقطة النهاية تعمل بشكل صحيح:
حليقة https://api.github.com/repos/bitcoin/bitcoin/issues
قم بتشغيل ما يلي لطباعة الإدخال الأول في خلاصتك:
حليقة https://api.github.com/repos/bitcoin/bitcoin/issues | جي كيو ‘.[0]’
سيُظهر هذا الحقول المختلفة التي ترسلها واجهة برمجة تطبيقات Github إلى jq. يمكنك استخدامها لإنشاء كائن JSON المخصص الخاص بك عن طريق توصيل الإدخال إلى مرشح الأقواس المتعرجة ({}):
حليقة https://api.github.com/repos/bitcoin/bitcoin/issues | جك’.[0] | { العنوان: .العنوان }’
تتيح لك إضافة مرشح الفاصلة (،) داخل الأقواس المتعرجة إضافة حقول متعددة إلى الكائن المخصص الخاص بك:
حليقة https://api.github.com/repos/bitcoin/bitcoin/issues | جك’.[0] | {العنوان: .title، عنوان url: .html_url، المؤلف: .user.login}’
محطة تعرض كائن JSON مخصصًا من واجهة برمجة تطبيقات Github.
ستؤدي إزالة “0” داخل الأقواس المربعة إلى تطبيق مرشح jq على الخلاصة بأكملها:
حليقة https://api.github.com/repos/bitcoin/bitcoin/issues | جي كيو ‘.[] | {العنوان: .title، عنوان url: .html_url، المؤلف: .user.login}’
يمكنك أيضًا إنشاء نص Bash صغير لعرض أحدث الإصدارات من مشروع Github المفضل لديك. قم بلصق كتلة التعليمات البرمجية التالية داخل ملف نصي Shell فارغ:
#!/bin/bash<br><br># الاستخدام: ./script.sh [0 … 29]<br><br>REPO=”https://api.github.com/repos/bitcoin/ البيتكوين/القضايا”<br><br>curl $REPO | jq “.[$1] | {العنوان: .title، عنوان url: .html_url، المؤلف: .user.login}”
احفظ ملفك، ثم قم بتشغيل الأمر التالي لجعله قابلاً للتنفيذ:
chmod u+x ./script.sh
اختبر قارئ الخلاصات الجديد الخاص بك عن طريق إدراج أحدث إصدار في Github repo المفضل لديك:
./script.sh 0
محطة تعرض عمل البرنامج النصي المخصص وطباعة أحدث إصدار من Github.
لمعلوماتك: تعرف على كيفية إنشاء خلاصات RSS مخصصة باستخدام RSS-Bridge في Linux.
2. القراءة والبحث في قاعدة بيانات JSON
بصرف النظر عن قراءة البيانات من واجهات برمجة التطبيقات، يمكنك أيضًا استخدام jq لإدارة ملفات JSON في جهازك المحلي. ابدأ بإنشاء ملف قاعدة بيانات JSON بسيط باستخدام محرر النصوص المفضل لديك:
نانو ./database.json
الصق كتلة البيانات التالية داخل ملفك، ثم احفظها:
[<br> {“id”: 1، “name”: “Ramces”، “balance”: 20}،<br> {“id”: 2، “name”: “Alice”، “balance”: 30} ,<br> {“id”: 3، “name”: “Bob”، “balance”: 10}،<br> {“id”: 4، “name”: “Charlie”، “balance”: 20} ,<br> {“id”: 5, “name”: “Maria”، “balance”: 50<br>]
اختبر ما إذا كان jq يقرأ ملف JSON الخاص بك بشكل صحيح عن طريق طباعة الكائن الأول في صفيف قاعدة البيانات الخاصة بك:
jq ‘.[0]’ قاعدة البيانات.json
محطة تعرض jq وهي تطبع الإدخال الأول في قاعدة بيانات JSON.
قم بإجراء استعلام في قاعدة بيانات JSON الخاصة بك باستخدام مرشح “Object Identifier-Index”. في حالتي، أبحث عن قيمة مفتاح “.name” في كل إدخال في قاعدة البيانات الخاصة بي:
جي كيو ‘.[] | قاعدة البيانات “.name”.json
يمكنك أيضًا استخدام بعض وظائف jq المضمنة لتصفية استعلاماتك بناءً على صفات معينة. على سبيل المثال، يمكنك البحث عن جميع كائنات JSON التي تحتوي على قيمة “.name” بأكثر من ستة أحرف وطباعتها:
جي كيو ‘.[] | حدد((.الاسم|الطول)>6)’ قاعدة البيانات.json
محطة تعرض مخرجات jq مع قيد طول الاسم.
العمل على قواعد بيانات JSON مع jq
بالإضافة إلى ذلك، يمكن لـ jq العمل على قواعد بيانات JSON المشابهة لجدول البيانات الأساسي. على سبيل المثال، يطبع الأمر التالي مجموع مفتاح “.balance” لكل كائن في قاعدة البيانات:
جي كيو ‘[.[] | .التوازن] | أضف قاعدة البيانات.json
يمكنك أيضًا توسيع هذا عن طريق إضافة عبارة شرطية إلى استعلامك. سيضيف ما يلي فقط “.balance” إذا كانت قيمة “.name” للكائن الثاني هي “Alice”:
jq ‘if .[1].name == “أليس” ثم [ .[] | .التوازن ] | أضف آخر “الاسم الثاني ليس أليس” نهاية قاعدة البيانات.json
محطة تعرض البيان الشرطي في jq الذي يعمل على قاعدة البيانات.
من الممكن إزالة المتغيرات مؤقتًا من قاعدة بيانات JSON الخاصة بك. يمكن أن يكون هذا مفيدًا إذا كنت تختبر الفلتر الخاص بك وتريد التأكد من أنه لا يزال قادرًا على معالجة مجموعة البيانات الخاصة بك:
jq ‘del(.[1].name) | .[]’ قاعدة البيانات.json
محطة تعرض الإدخال الثاني بدون اسم مفتاح JSON.
يمكنك أيضًا إدراج متغيرات جديدة في قاعدة البيانات الخاصة بك باستخدام عامل التشغيل “+”. على سبيل المثال، يضيف السطر التالي المتغير “active: true” إلى الكائن الأول في قاعدة البيانات:
جك’.[0] + {نشط: صحيح}’ قاعدة البيانات.json
محطة تعرض قيمة مفتاح إضافية عند إدخال قاعدة البيانات الأولى.
ملاحظة: يمكنك جعل تغييراتك دائمة عن طريق توصيل مخرجات أمر jq إلى ملف قاعدة البيانات الأصلي: jq ‘.[0] + {نشط: صحيح}’ قاعدة البيانات.json > قاعدة البيانات.json.
3. تحويل البيانات غير JSON إلى jq
ميزة أخرى رائعة لـ jq هي أنه يمكنه قبول البيانات غير JSON والعمل معها. ولتحقيق ذلك، يستخدم البرنامج “وضع slurp” بديل حيث يقوم بتحويل أي مسافة وبيانات محددة بالأسطر الجديدة إلى مصفوفة JSON.
يمكنك تمكين هذه الميزة عن طريق توصيل البيانات إلى jq باستخدام علامة -s:
صدى ‘1 2’ | جك-س.
محطة تعرض سلسلة نصية تم تحويلها إلى مصفوفة JSON.
إحدى ميزات تحويل بياناتك الأولية إلى مصفوفة هي أنه يمكنك معالجتها باستخدام أرقام فهرس المصفوفة. يضيف الأمر التالي قيمتين بالإشارة إلى موقع المصفوفة المحولة الخاصة بهما:
صدى ‘1 2’ | جي كيو -s ‘.[0] + .[1]’
يمكنك تطوير موقع المصفوفة هذا وإنشاء كود JSON جديد حوله. على سبيل المثال، يقوم هذا الكود بتحويل النص من أمر echo إلى كائن JSON من خلال مرشح الأقواس المتعرجة:
صدى ‘6 “مالوري” 10’ | jq -s ‘{“id”: .[0], “name”: .[1], “balance”: .[2]}’
محطة طرفية تعرض كائن JSON مخصص بتنسيق نموذج قاعدة البيانات.
وبصرف النظر عن أخذ البيانات الأولية، يمكن لـ jq أيضًا إرجاع بيانات غير JSON كمخرجاتها. يعد هذا مفيدًا إذا كنت تستخدم jq كجزء من برنامج نصي أكبر وتحتاج فقط إلى النتيجة من مرشحاته.
للقيام بذلك، قم بتشغيل jq متبوعًا بالعلامة -r. على سبيل المثال، يقرأ الأمر التالي جميع الأسماء من ملف قاعدة البيانات الخاص بي ويعيدها كبيانات نصية عادية:
jq -r ‘.[] | قاعدة البيانات “.name”.json
محطة تعرض قائمة الأسماء من قاعدة البيانات مع تجريد تنسيقاتها.
موزعي JSON البديل لـ jq
نظرًا لأن كود jq مفتوح المصدر، فقد أنشأ العديد من المطورين إصداراتهم الخاصة من محلل JSON. كل واحدة منها لها نقطة بيع فريدة خاصة بها والتي إما تعمل على تحسين أو تغيير جزء أساسي من jq.
1. Jaq
Jaq هو محلل JSON قوي يوفر ميزة مماثلة تقريبًا مضبوطة على jq.
واحدة من أكبر نقاط البيع في Jaq المكتوبة بلغة Rust هي أنه يمكنه تشغيل لغة jq أسرع بما يصل إلى 30 مرة من المحلل اللغوي الأصلي مع الاحتفاظ بالتوافق مع الإصدارات السابقة. وهذا وحده يجعله ذا قيمة عندما تقوم بتشغيل مرشحات jq كبيرة وترغب في زيادة أداء جهازك إلى أقصى حد.
محطة تظهر jaq قيد التشغيل على نموذج قاعدة البيانات الخاصة بي.
ومع ذلك، أحد الجوانب السلبية لـ jaq هو أنه غير متوفر حاليًا في مستودعات Debian وUbuntu وFedora. الطريقة الوحيدة للحصول عليه هي تنزيل Homebrew أو تجميعه من المصدر.
2. Gojq
Gojq هو محلل JSON بديل مكتوب بالكامل بلغة Go. فهو يوفر إصدارًا سهل الوصول إليه وسهل الاستخدام من jq والذي يمكنك تثبيته على أي نظام أساسي تقريبًا.
يمكن أن يكون برنامج jq الأصلي مقتضبًا بشكل لا يصدق في رسائل الخطأ الخاصة به. ونتيجة لذلك، يعد تصحيح أخطاء البرامج النصية jq أمرًا صعبًا بشكل خاص بالنسبة لمستخدم jq الجديد. يحل Gojq هذه المشكلة من خلال إظهار مكان الخطأ في البرنامج النصي الخاص بك بالإضافة إلى تقديم رسائل مفصلة حول نوع الخطأ الذي حدث.
محطة تعرض قاعدة بيانات نموذجية مقروءة لـ gojq.
نقطة بيع أخرى لـ gojq هي أنه يمكنه قراءة ومعالجة ملفات JSON وYAML. قد يكون هذا مفيدًا بشكل خاص إذا كنت من مستخدمي Docker وDocker Compose وتريد أتمتة سير عمل النشر.
أكبر مشكلة تواجه Gojq هي أنها أزالت بعض الميزات التي تأتي افتراضيًا في محلل jq الأصلي. على سبيل المثال، خيارات مثل –ascii-output و–seq و–sort-keys غير موجودة في gojq.
لمعلوماتك: تعرف على كيفية تحسين رمز JSON الخاص بك باستخدام بعض أفضل أدوات تجميل JSON اليوم.
3.fq
على عكس jaq وgojq، فإن fq عبارة عن مجموعة أدوات برمجية شاملة يمكنها تحليل البيانات النصية والثنائية. يمكنه العمل مع مجموعة متنوعة من التنسيقات الشائعة مثل JSON وYAML وHTML وحتى FLAC.
محطة تظهر fq قراءة ملف قاعدة البيانات النموذجي.
أكبر ميزة في fq هي أنه يحتوي على قارئ سداسي عشري مدمج للملفات. وهذا يجعل من السهل النظر إلى البنية الداخلية للملف لتحديد كيفية إنشائه وما إذا كان هناك أي خطأ فيه. بصرف النظر عن ذلك، يستخدم fq أيضًا نفس بناء جملة jq عند التعامل مع النص مما يجعل من السهل التعلم لأي شخص مطلع على jq.
أحد الجوانب السلبية لهذا الهدف الطموح هو أن fq لا يزال قيد التطوير المكثف. وعلى هذا النحو، لا تزال بعض ميزات البرنامج وسلوكياته تخضع لتغييرات شاملة.
إن استكشاف jq وكيفية عمله وما يجعله مميزًا هو مجرد خطوة أولى في تعلم كيفية إنشاء البرامج على جهاز الكمبيوتر الخاص بك. قم بالتعمق في عالم البرمجة الرائع من خلال قراءة أساسيات برمجة الصدفة.
يعتبر jq أداة لا غنى عنها في عالم البرمجة وتحليل البيانات. من خلال إتقان استخدام هذه الأداة، يمكنك تسريع عملية معالجة بيانات JSON وجعلها أكثر فعالية. قم بتجربة الأوامر والنماذج المختلفة التي تم تقديمها في هذا المقال لتصبح أكثر احترافية في التعامل مع البيانات، واستفد من الميزات التي يقدمها jq لتعزيز إنتاجيتك في مشاريعك المستقبلية.