عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

jq - عبر الإنترنت في السحابة

قم بتشغيل jq في مزود استضافة OnWorks المجاني عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر jq الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


jq - معالج JSON لسطر الأوامر

موجز


jq [الخيارات...] تصفية [ملفات...]

jq يمكن تحويل JSON بطرق مختلفة ، عن طريق التحديد والتكرار والتقليل وغير ذلك
تعديل مستندات JSON. على سبيل المثال ، تشغيل الأمر jq ´ الخريطة (. السعر) | يضيف سوف
خذ مصفوفة من كائنات JSON كمدخلات وأرجع مجموع حقول "السعر".

jq يمكنه قبول إدخال النص أيضًا ، ولكن بشكل افتراضي ، jq يقرأ دفقًا من كيانات JSON
(بما في ذلك الأرقام والحرف الأخرى) من ستدين. هناك حاجة فقط للمسافة البيضاء للفصل
كيانات مثل 1 و 2 ، وصواب وخطأ. واحد أو أكثر ملفات قد يتم تحديدها ، والتي
حقيبة jq سيقرأ المدخلات من هؤلاء بدلاً من ذلك.

الخيارات موصوفة في الفاتورة JQ الجزء؛ تتعلق في الغالب بالمدخلات والمخرجات
التنسيق. ال تصفية مكتوب بلغة jq ويحدد كيفية تحويل
ملف الإدخال أو المستند.

فلتر


برنامج jq هو "مرشح": يأخذ مدخلًا وينتج مخرجات. هناك الكثير من
مرشحات مدمجة لاستخراج حقل معين من كائن ، أو تحويل رقم إلى
سلسلة أو مهام قياسية أخرى مختلفة.

يمكن دمج المرشحات بعدة طرق - يمكنك توجيه إخراج مرشح واحد إلى
مرشح آخر ، أو جمع ناتج عامل التصفية في مصفوفة.

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

من المهم أن تتذكر أن كل مرشح له مدخلات ومخرجات. حتى الحرفية
مثل "hello" أو 42 عبارة عن فلاتر - تأخذ مُدخلات ولكنها تنتج دائمًا نفس الحرف مثل
انتاج. العمليات التي تجمع بين مرشحين ، مثل الإضافة ، تغذي نفس المدخلات بشكل عام
لكليهما ودمج النتائج. لذلك ، يمكنك تنفيذ مرشح متوسط ​​مثل تضيف / الطول
- تغذية مجموعة المدخلات على حد سواء تضيف مرشح و الطول تصفية ثم أداء
تقسيم.

لكن هذا يتقدم على أنفسنا. :) لنبدأ بشيء أبسط:

الفاتورة JQ


تعمل فلاتر jq على دفق بيانات JSON. يتم تحليل الإدخال إلى jq كتسلسل من
قيم JSON المفصولة بمسافات بيضاء والتي يتم تمريرها من خلال الفلتر المقدم واحد عند أ
زمن. تتم كتابة إخراج (مخرجات) المرشح إلى المعيار ، مرة أخرى على شكل تسلسل
بيانات JSON مفصولة بمسافات بيضاء.

ملاحظة: من المهم مراعاة قواعد اقتباس الصدفة. كقاعدة عامة فمن الأفضل
اقتبس دائمًا (بأحرف اقتباس مفردة) برنامج jq ، مثل العديد من الأحرف التي تحتوي على
المعنى الخاص لـ jq هي أيضًا أحرف وصفية للقذيفة. على سبيل المثال، jq "فو" سوف تفشل
معظم قذائف Unix لأن ذلك سيكون مثل jq فو، والتي ستفشل بشكل عام
لان فو is ليس تعريف. عند استخدام أمر Windows shell (cmd.exe) فمن الأفضل أن
استخدم علامات الاقتباس المزدوجة حول برنامج jq عند إعطائك في سطر الأوامر (بدلاً من -f
ملف البرنامج الخيار) ، ولكن بعد ذلك ، تحتاج علامات الاقتباس المزدوجة في برنامج jq إلى الهروب بخط مائل عكسي.

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

· --الإصدار:

إخراج نسخة jq والخروج مع الصفر.

· - مثل:

استخدم التطبيق / json-seq مخطط نوع MIME لفصل نصوص JSON في مدخلات jq
والإخراج. هذا يعني أنه تمت طباعة حرف ASCII RS (فاصل السجل) من قبل
تتم طباعة كل قيمة على الإخراج ويتم طباعة ASCII LF (تغذية الخط) بعد كل إخراج. مدخل
يتم تجاهل نصوص JSON التي تفشل في التحليل (ولكن يتم التحذير منها) ، مع تجاهل الكل
المدخلات اللاحقة حتى RS المقبل. يوزع هذا أيضًا إخراج jq بدون امتداد
- مثل الخيار.

· --مجرى:

تحليل المدخلات بطريقة التدفق ، وإخراج مصفوفات المسار وقيم الأوراق
(الحجميات والمصفوفات الفارغة أو الكائنات الفارغة). على سبيل المثال، "A" يصبح [[]،"أ"]و
[[] ، "أ" ، ["ب"]] يصبح [[0] ، []], [[1] ، "أ"]و [[1,0،XNUMX] ، "ب"].

هذا مفيد لمعالجة المدخلات الكبيرة جدًا. استخدم هذا بالاشتراك مع
التصفية و تخفيض و foreach بناء الجملة لتقليل المدخلات الكبيرة بشكل تدريجي.

· --تسرع في الشراب/-s:

بدلاً من تشغيل عامل التصفية لكل كائن JSON في الإدخال ، اقرأ الإدخال بالكامل
تدفق في مجموعة كبيرة وتشغيل الفلتر مرة واحدة فقط.

· --المدخلات الخام/-R:

لا تحلل الإدخال كـ JSON. بدلاً من ذلك ، يتم تمرير كل سطر من النص إلى عامل التصفية كملف
سلسلة. إذا تم دمجها مع --تسرع في الشراب، ثم يتم تمرير الإدخال بالكامل إلى المرشح كملف
سلسلة واحدة طويلة.

· - مدخلات كاملة/-n:

لا تقرأ أي مدخلات على الإطلاق! بدلاً من ذلك ، يتم تشغيل المرشح مرة واحدة باستخدام فارغة كمدخل.
هذا مفيد عند استخدام jq كآلة حاسبة بسيطة أو لبناء بيانات JSON من
خدش.

· - الإخراج المضغوط / -c:

بشكل افتراضي ، يطبع jq pretty إخراج JSON. سيؤدي استخدام هذا الخيار إلى المزيد
إخراج مضغوط من خلال وضع كل كائن JSON في سطر واحد بدلاً من ذلك.

· --التبويب:

استخدم علامة تبويب لكل مستوى مسافة بادئة بدلاً من مسافتين.

· - المسافة n:

استخدم عدد المسافات المحدد (لا يزيد عن 8) للمسافات البادئة.

· - اللون الناتج / -C و - خرج أحادي اللون / -M:

بشكل افتراضي ، يقوم jq بإخراج JSON ملونًا عند الكتابة إلى محطة طرفية. يمكنك إجبارها على ذلك
إنتاج الألوان حتى لو كانت الكتابة على أنبوب أو ملف باستخدام -C، وتعطيل اللون باستخدام -M.

· - ASCII- الإخراج / -a:

يُخرج jq عادةً نقاط تشفير غير ASCII Unicode كـ UTF-8 ، حتى إذا تم تحديد الإدخال
عليها كتسلسلات هروب (مثل "\ u03bc"). باستخدام هذا الخيار ، يمكنك إجبار jq على
إنتاج مخرجات ASCII نقية مع استبدال كل حرف غير ASCII بما يعادله
تسلسل الهروب.

· - غير عابرة

قم بمسح الإخراج بعد طباعة كل كائن JSON (مفيد إذا كنت تستخدم الأنابيب ببطء
مصدر البيانات إلى إخراج jq و piping jq في مكان آخر).

· - مفاتيح الفرز / -S:

قم بإخراج حقول كل كائن بالمفاتيح بالترتيب الفرز.

· - سحب الإخراج / -r:

باستخدام هذا الخيار ، إذا كانت نتيجة المرشح عبارة عن سلسلة ، فسيتم كتابتها مباشرة
للمخرجات القياسية بدلاً من تنسيقها كسلسلة JSON بعلامات اقتباس. هذا يمكن
مفيدة في جعل مرشحات jq تتحدث إلى الأنظمة التي لا تعتمد على JSON.

· - الانضمام إلى الإخراج / -j:

اعجاب -r لكن jq لن تطبع سطرًا جديدًا بعد كل إخراج.

· -f اسم الملف / --من - الملف اسم الملف:

قراءة عامل التصفية من الملف وليس من سطر الأوامر ، مثل خيار awk´s -f. أنت
يمكن أيضًا استخدام ´ # ´ لإبداء التعليقات.

· - دليل / -L دليل:

يعلق دليل إلى قائمة البحث عن الوحدات. إذا تم استخدام هذا الخيار فلا
يتم استخدام قائمة البحث المضمنة. انظر القسم الخاص بالوحدات أدناه.

· -e / - حالة الخروج:

يضبط حالة الخروج من jq على 0 إذا لم تكن قيم المخرجات الأخيرة أيًا منهما زائف ولا فارغة,
1 إذا كانت قيمة الإخراج الأخيرة إما زائف or فارغة، أو 4 إذا لم تكن هناك نتيجة صحيحة على الإطلاق
أنتجت. عادةً ما يخرج jq مع 2 إذا كان هناك أي مشكلة في الاستخدام أو خطأ في النظام ، 3
إذا كان هناك خطأ في التحويل البرمجي لبرنامج jq ، أو 0 إذا تم تشغيل برنامج jq.

· --arg الاسم قيمنا:

يمرر هذا الخيار قيمة إلى برنامج jq كمتغير محدد مسبقًا. إذا قمت بتشغيل jq
مع --arg فو شريط، ثم $ فو متوفر في البرنامج وله قيمة "شريط".
نلاحظ أن قيمنا سيتم التعامل معها كسلسلة ، لذلك --arg فو 123 سوف تلتزم $ فو إلى "123".

· - ارجيسون الاسم JSON- نص:

يمرر هذا الخيار قيمة بتشفير JSON إلى برنامج jq كمتغير محدد مسبقًا. لو
تقوم بتشغيل jq مع - ارجيسون فو 123، ثم $ فو متاح في البرنامج ولديه
قيمنا 123.

· --slurpfile اسم المتغير اسم الملف:

يقرأ هذا الخيار جميع نصوص JSON في الملف المحدد ويربط مصفوفة من
قيم JSON المحللة إلى المتغير الشامل المحدد. إذا قمت بتشغيل jq مع --argfile فو شريط,
then $ فو متوفر في البرنامج ولديه مصفوفة تتوافق عناصرها
اسمه النصوص في الملف شريط.

· --argfile اسم المتغير اسم الملف:

لا تستخدم. يستخدم --slurpfile بدلا من ذلك.

(هذا الخيار مثل --slurpfile، ولكن عندما يحتوي الملف على نص واحد فقط ، فهذا يعني أنه
مستخدم ، وإلا فسيتم استخدام مجموعة من النصوص كما في --slurpfile.)

· --تشغيل الاختبارات [اسم الملف]:

يدير الاختبارات في الملف المحدد أو الإدخال القياسي. يجب أن يكون هذا هو الخيار الأخير المعطى
ولا يحترم جميع الخيارات السابقة. الإدخال يتكون من سطور تعليق فارغة
الأسطر ، وخطوط البرنامج متبوعة بخط إدخال واحد ، بعدد سطور الإخراج كما هي
متوقع (واحد لكل إخراج) ، وسطر فارغ منتهي. اختبارات فشل التجميع
ابدأ بسطر يحتوي على "٪٪ FAIL" فقط ، ثم سطر يحتوي على البرنامج إلى
تجميع ، ثم سطر يحتوي على رسالة خطأ للمقارنة بالفعلي.

كن حذرًا من أن هذا الخيار يمكن أن يتغير بشكل عكسي - غير متوافق.

أساسي فلتر


.
أبسط مرشح مطلق (والأقل إثارة للاهتمام) هو .. هذا هو المرشح الذي يأخذ ملف
المدخلات وينتجها دون تغيير كإخراج.

نظرًا لأن jq بشكل افتراضي يطبع كل الإخراج بشكل افتراضي ، يمكن أن يكون هذا البرنامج البسيط طريقة مفيدة لـ
تنسيق إخراج JSON من ، على سبيل المثال ، حليقة.

جي كيو ´.´
"مرحبا بالعالم!"
=> "أهلاً بالعالم!"

.foo ، .foo.bar
الابسط مفيد المرشح .foo. عند إعطاء كائن JSON (ويعرف أيضًا باسم القاموس أو التجزئة) مثل
الإدخال ، فإنه ينتج القيمة عند المفتاح "foo" ، أو القيمة null إذا لم يكن هناك أي قيمة.

إذا كان المفتاح يحتوي على أحرف خاصة ، فأنت بحاجة إلى إحاطة المفتاح بعلامات اقتباس مزدوجة مثل
هذه: . "foo $".

مرشح النموذج .foo.bar ما يعادل .foo | .bar.

جي كيو ´.فو´
{"foo": 42، "bar": "بيانات أقل إثارة"}
=> 42

جي كيو ´.فو´
{"notfoo": صحيح ، "alsonotfoo": خطأ}
=> لاغية

jq ´. ["foo"] ´
{"فو": 42}
=> 42

.foo؟
تماما مثل .foo، ولكن لا ينتج حتى خطأ عندما . ليس مصفوفة أو كائن.

jq ´.foo؟ ´
{"foo": 42، "bar": "بيانات أقل إثارة"}
=> 42

jq ´.foo؟ ´
{"notfoo": صحيح ، "alsonotfoo": خطأ}
=> لاغية

jq ´. ["foo"]؟ ´
{"فو": 42}
=> 42

jq ´ [.foo؟] ´
[1,2]
=> []

. [ ] ، . [2]، [10:15].
يمكنك أيضًا البحث عن حقول كائن باستخدام بناء الجملة مثل . ["فو"] (.foo أعلاه هو ملف
نسخة مختصرة من هذا). هذا يعمل مع المصفوفات أيضًا ، إذا كان المفتاح عددًا صحيحًا.
المصفوفات تعتمد على الصفر (مثل جافا سكريبت) ، لذلك [2] تُرجع العنصر الثالث من المصفوفة.

[10:15]. يمكن استخدام بناء الجملة لإرجاع مصفوفة فرعية من مصفوفة أو سلسلة فرعية لسلسلة.
تم إرجاع المصفوفة بواسطة [10:15]. سيكون بطول 5 ، ويحتوي على عناصر من الفهرس 10
(ضمناً) للفهرس 15 (حصري). قد يكون أي من الفهرين سالبًا (في هذه الحالة يكون مهمًا
إلى الوراء من نهاية المصفوفة) ، أو حذفها (في هذه الحالة يشير إلى البداية أو
نهاية المصفوفة).

[2] يمكن استخدام بناء الجملة لإرجاع العنصر في الفهرس المحدد. المؤشرات السلبية
مسموح به ، مع -1 يشير إلى العنصر الأخير ، -2 يشير إلى العنصر التالي إلى الأخير ،
وما إلى ذلك وهلم جرا.

.foo لا يعمل بناء الجملة إلا للمفاتيح البسيطة ، أي المفاتيح التي تتكون جميعها من أحرف أبجدية رقمية.
. [ ] يعمل مع المفاتيح التي تحتوي على أحرف خاصة مثل النقطتين والنقاط. ل
مثال . ["foo :: bar"] و . ["foo.bar"] أثناء العمل .foo :: bar و .foo.bar لا.

? يمكن أيضًا استخدام "عامل التشغيل" مع عامل تشغيل الشرائح ، كما هو الحال في [10:15]؟، والتي نواتج
القيم التي تكون فيها المدخلات قادرة على الشرائح.

jq ´. [0] ´
[{"الاسم": "JSON"، "good": true}، {"name": "XML"، "good": false}]
=> {"name": "JSON"، "good": true}

jq ´. [2] ´
[{"الاسم": "JSON"، "good": true}، {"name": "XML"، "good": false}]
=> لاغية

jq ´. [2: 4] ´
["أ" ، "ب" ، "ج" ، "د" ، "هـ"]
=> ["ج"، "د"]

jq ´. [2: 4] ´
"abcdefghi"
=> "قرص مضغوط"

jq ´. [: 3] ´
["أ" ، "ب" ، "ج" ، "د" ، "هـ"]
=> ["أ" ، "ب" ، "ج"]

jq ´. [- 2:] ´
["أ" ، "ب" ، "ج" ، "د" ، "هـ"]
=> ["d"، "e"]

jq ´. [- 2] ´
[1,2,3]
=> 2

. []
إذا كنت تستخدم .[فهرس] بناء الجملة ، ولكن حذف الفهرس بالكامل ، سيعود من جميع ل
عناصر المصفوفة. ادارة . [] مع المدخلات [1,2,3] ستنتج الأعداد على شكل ثلاثة
نتائج منفصلة ، وليس كمصفوفة واحدة.

يمكنك أيضًا استخدام هذا على كائن ، وسيعيد جميع قيم الكائن.

jq ´. [] ´
[{"الاسم": "JSON"، "good": true}، {"name": "XML"، "good": false}]
=> {"name": "JSON"، "good": true}، {"name": "XML"، "good": false}

jq ´. [] ´
[]
=>

jq ´. [] ´
{"أ": 1 ، "ب": 1}
=> 1 ، 1

. []؟
اعجاب . []، ولكن لن يتم إخراج أي أخطاء إذا. ليس مصفوفة أو كائن.

,
إذا تم فصل مرشحين بفاصلة ، فسيتم إدخال الإدخال في كليهما وهناك
ستكون نواتج متعددة: أولاً ، جميع المخرجات الناتجة عن التعبير الأيسر ، و
ثم كل المخرجات التي ينتجها اليمين. على سبيل المثال ، مرشح .foo ، .شريط، ينتج عنه
كل من حقلي "foo" و "bar" كمخرجات منفصلة.

jq ´.foo و .bar´
{"foo": 42، "bar": "شيء آخر"، "baz": صحيح}
=> 42 ، "شيء آخر"

jq ´.user، .projects [] ´
{"user": "stedolan"، "projects": ["jq"، "wikiflow"]}
=> "stedolan" ، "jq" ، "wikiflow"

jq ´. [4,2] ´
["أ" ، "ب" ، "ج" ، "د" ، "هـ"]
=> "e"، "c"

|
يعد | يجمع المشغل بين مرشحين عن طريق تغذية خرج (مخرجات) المرشح الموجود على اليسار في
مدخلات واحد على اليمين. إنه يشبه إلى حد كبير أنبوب غلاف Unix ، إذا كان
أنت معتاد على ذلك.

إذا كان الشخص الموجود على اليسار ينتج عدة نتائج ، فسيتم تشغيل النتيجة الموجودة على اليمين
كل من تلك النتائج. إذن ، التعبير . [] | .foo يسترجع حقل "foo" لكل منها
عنصر من صفيف الإدخال.

jq ´. [] | .اسم
[{"الاسم": "JSON"، "good": true}، {"name": "XML"، "good": false}]
=> "JSON" ، "XML"

أنواع لأي لبس القيم


يدعم jq نفس مجموعة أنواع البيانات مثل JSON - الأرقام ، السلاسل ، القيم المنطقية ، المصفوفات ،
كائنات (والتي في لغة JSON هي تجزئات بمفاتيح سلسلة فقط) و "خالية".

تتم كتابة القيم المنطقية ، الخالية ، السلاسل والأرقام بنفس الطريقة كما في جافا سكريبت. تماما مثل
كل شيء آخر في jq ، تأخذ هذه القيم البسيطة مدخلاً وتنتج مخرجات - 42 هو
تعبير jq صالح يأخذ مدخلاً ويتجاهله ويعيد 42 بدلاً منه.

مجموعة إنشاء - []
كما في JSON ، [] يستخدم لبناء المصفوفات ، كما في [1,2,3]. يمكن لعناصر المصفوفات
يكون أي تعبير jq. يتم جمع كافة النتائج الناتجة عن كل التعبيرات
في مجموعة كبيرة واحدة. يمكنك استخدامه لبناء مصفوفة من كمية معروفة من القيم
(كما هو الحال في [.foo، .شريط، .باز]) أو "جمع" كل نتائج عامل التصفية في مصفوفة (مثل
in [. العناصر []. الاسم])

بمجرد أن تفهم عامل التشغيل "،" ، يمكنك إلقاء نظرة على صيغة مصفوفة jq بصيغة مختلفة
النور: التعبير [1,2,3] لا يستخدم بنية مضمنة لمصفوفات مفصولة بفواصل ،
ولكن بدلاً من ذلك يتم تطبيق [] عامل التشغيل (جمع النتائج) للتعبير 1,2,3،XNUMX،XNUMX (أي
ينتج ثلاث نتائج مختلفة).

إذا كان لديك مرشح X التي ينتج عنها أربع نتائج ، ثم التعبير [X] سينتج أ
نتيجة واحدة ، مصفوفة من أربعة عناصر.

jq ´ [.user، .projects []] ´
{"user": "stedolan"، "projects": ["jq"، "wikiflow"]}
=> ["stedolan"، "jq"، "wikiflow"]

الأجسام - {}
مثل JSON ، {} هو لبناء كائنات (ويعرف أيضا باسم القواميس أو التجزئة) ، كما في: {"أ": 42
"ب": 17}.

إذا كانت المفاتيح "معقولة" (جميع الأحرف الأبجدية) ، فيمكن ترك علامات الاقتباس.
يمكن أن تكون القيمة أي تعبير (على الرغم من أنك قد تحتاج إلى لفها بين قوسين إذا كانت
واحد معقد) ، والذي يتم تطبيقه على إدخال التعبير {} (تذكر ، جميع المرشحات
لديك مدخلات ومخرجات).

{فو: .بار}

سينتج كائن JSON {"فو": 42} إذا أعطيت كائن JSON {"شريط": 42 ، "باز": 43}.
يمكنك استخدام هذا لتحديد حقول معينة من كائن: إذا كان الإدخال كائنًا به
حقول "المستخدم" و "العنوان" و "المعرف" و "المحتوى" وتريد فقط "المستخدم" و "العنوان" ، يمكنك
اكتب

{المستخدم: .user ، العنوان: .title}

لأن هذا شائع جدًا ، فهناك بناء جملة مختصرة: {المستعمل، لقب}.

إذا كان أحد التعبيرات ينتج عنه نتائج متعددة ، فستكون القواميس المتعددة كذلك
أنتجت. إذا كان المدخلات

{"user": "stedolan"، "title": ["JQ Primer"، "More JQ"]}

ثم التعبير

{المستخدم ، العنوان: .titles []}

ستنتج نتيجتين:

{"المستخدم": "ستيدولان"، "العنوان": "JQ Primer"}
{"user": "stedolan"، "title": "More JQ"}

يعني وضع أقواس حول المفتاح أنه سيتم تقييمه كتعبير. مع ال
نفس المدخلات المذكورة أعلاه ،

{(.المستخدم): .العناوين}

ينتج عنه

{"ستيدولان": ["JQ Primer"، "More JQ"]}

jq ´ {user، title: .titles []} ´
{"user": "stedolan"، "title": ["JQ Primer"، "More JQ"]}
=> {"user": "stedolan"، "title": "JQ Primer"}، {"user": "stedolan"، "title": "More JQ"}

jq ´ {(. user): .titles} ´
{"user": "stedolan"، "title": ["JQ Primer"، "More JQ"]}
=> {"stedolan": ["JQ Primer"، "المزيد من JQ"]}

مدمج OPERATORS لأي لبس وظائف


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

إضافة - +
عامل التشغيل + يأخذ مرشحين ، ويطبقهما على نفس الإدخال ، ويضيف
النتائج معًا. يعتمد معنى "الإضافة" على الأنواع المعنية:

· أرقام تمت إضافتها عن طريق الحساب العادي.

· المصفوفات يتم إضافتها من خلال كونها متسلسلة في مجموعة أكبر.

· سلاسل يتم إضافتها من خلال ضمها إلى سلسلة أكبر.

· الأجسام يتم إضافتها عن طريق الدمج ، أي إدراج جميع أزواج المفتاح والقيمة من كليهما
كائنات في كائن واحد مدمج. إذا كان كلا الكائنين يحتويان على قيمة لنفسه
المفتاح ، الكائن الموجود على يمين الملف + يفوز. (للدمج العودي ، استخدم ملف * المشغل أو العامل.)

فارغة يمكن إضافتها إلى أي قيمة ، وإرجاع القيمة الأخرى دون تغيير.

جي كيو ´.أ + 1´
{"أ": 7}
=> 8

جي كيو ´.أ + .ب´
{"أ": [1,2،3,4] ، "ب": [XNUMX،XNUMX]}
=> [1,2,3,4،XNUMX،XNUMX،XNUMX]

jq ´.a + null´
{"أ": 1}
=> 1

جي كيو ´.أ + 1´
{}
=> 1

jq ´ {a: 1} + {b: 2} + {c: 3} + {a: 42} ´
فارغة
=> {"أ": 42 ، "ب": 2 ، "ج": 3}

طرح - -
بالإضافة إلى الطرح الحسابي العادي على الأرقام ، فإن - يمكن استخدام عامل التشغيل على المصفوفات
لإزالة جميع تكرارات عناصر المصفوفة الثانية من المصفوفة الأولى.

جي كيو ´4 - .a´
{"أ": 3}
=> 1

جي ق ´. - ["xml"، "yaml"] ´
["xml"، "yaml"، "json"]
=> ["json"]

عمليه الضرب، قطاع، مودولو - *, /, و %
تتصرف عوامل التشغيل هذه بالشكل المتوقع عند إعطائها رقمين. القسمة على الصفر ترفع
خطا. x % y يحسب x modulo y.

ينتج عن ضرب سلسلة في رقم تسلسل تلك السلسلة كثيرًا
. "x" * 0 ينتج عنه فارغة.

قسمة سلسلة على أخرى يتم تقسيم الأول باستخدام الثاني كفواصل.

سيؤدي ضرب كائنين إلى دمجهما بشكل تعاودي: يعمل هذا كإضافة ولكن إذا كان كلاهما
الكائنات تحتوي على قيمة لنفس المفتاح ، والقيم هي كائنات ، يتم دمج الاثنين
بنفس الإستراتيجية.

جي ق ´10 /. * 3´
5
=> 6

جي ق ´. / "،" ´
"أ ، ب ، ج ، د ، هـ"
=> ["أ" ، "ب ، ج ، د" ، "هـ"]

jq ´ {"k": {"a": 1، "b": 2}} * {"k": {"a": 0، "c": 3}} ´
فارغة
=> {"k": {"a": 0، "b": 2، "c": 3}}

jq ´. [] | (1 /.)؟ ´
[1,0،1، -XNUMX]
=> 1، -1

الطول
الوظيفة المدمجة الطول يحصل على طول أنواع مختلفة من القيمة:

· طول أ سلسلة هو عدد نقاط كود Unicode التي يحتوي عليها (والتي ستكون
نفس طوله بترميز JSON بالبايت إذا كان ASCII خالصًا).

· طول مجموعة هو عدد العناصر.

· طول موضوع هو عدد أزواج المفتاح والقيمة.

· طول فارغة صفر.

jq ´. [] | length´ [[1,2،2]، "string"، {"a": 2}، null] => 6، 1، 0، XNUMX

مفاتيح، مفاتيح_غير مرتبة
الوظيفة المدمجة مفاتيح، عند إعطائه كائنًا ، يتم إرجاع مفاتيحه في مصفوفة.

يتم فرز المفاتيح "أبجديًا" بترتيب نقاط التشفير الموحد. هذا ليس أمرا
يكون هذا منطقيًا بشكل خاص في أي لغة معينة ، ولكن يمكنك الاعتماد على أنها
نفس الشيء بالنسبة لأي كائنين بنفس مجموعة المفاتيح ، بغض النظر عن إعدادات اللغة.

متى مفاتيح معطى مصفوفة ، فإنه يعيد الفهارس الصالحة لتلك المصفوفة: الأعداد الصحيحة
من 0 إلى الطول -1.

مفاتيح_غير مرتبة الوظيفة فقط مثل مفاتيح، ولكن إذا كان الإدخال كائنًا ، فإن المفاتيح
لن يتم فرزها ، وبدلاً من ذلك ستكون المفاتيح في ترتيب الإدخال تقريبًا.

jq keys´
{"abc": 1، "abcd": 2، "Foo": 3}
=> ["Foo"، "abc"، "abcd"]

jq keys´
[42,3,35]
=> [0,1,2،XNUMX،XNUMX،XNUMX]

لديه (مفتاح)
الوظيفة المدمجة لديها إرجاع ما إذا كان كائن الإدخال يحتوي على المفتاح المحدد ، أو الإدخال
تحتوي المصفوفة على عنصر في الفهرس المحدد.

لديه (مفتاح $) له نفس تأثير فحص ما إذا كان مفتاح $ هو عضو في المصفوفة عاد
by مفاتيح، على الرغم من لديها سيكون أسرع.

jq ´map (has ("foo")) ´
[{"foo": 42} ، {}]
=> [صح ، خطأ]

jq ´map (لديها(2)) ´
[[0,1،XNUMX] ، ["أ" ، "ب" ، "ج"]]
=> [خطأ ، صحيح]

in
الوظيفة المدمجة in تُرجع مفتاح الإدخال في الكائن المحدد ، أو في فهرس الإدخال
يتوافق مع عنصر في المصفوفة المحددة. إنه ، في الأساس ، نسخة مقلوبة من
لديها.

jq ´. [] | في ({"foo": 42}) ´
["foo"، "bar"]
=> صح ، خطأ

jq ´map (في ([0,1،XNUMX])) ´
[2، 0]
=> [خطأ ، صحيح]

مسار (تعبير_المسار)
إخراج تمثيلات المصفوفة لتعبير المسار المحدد بتنسيق .. النواتج هي صفائف من
سلاسل (مفاتيح في كائنات 0 و / أو أرقام (مؤشرات مصفوفة.

تعبيرات المسار هي تعبيرات jq مثل .a، لكن أيضا . []. هناك نوعان من المسارات
التعبيرات: التي يمكن أن تتطابق تمامًا ، وتلك التي لا تتطابق تمامًا. على سبيل المثال، .abc هو
تعبير مسار المطابقة التامة ، بينما . أ []. ب ليس.

المسار (التعبير الدقيق عن المسار) سينتج تمثيل مصفوفة لتعبير المسار
حتى لو لم يكن موجودًا في .، إذا . is فارغة أو مصفوفة أو كائن.

مسار (نمط) سينتج تمثيلات مصفوفة لمسارات مطابقة النمط إذا كان
مسارات موجودة في ..

لاحظ أن تعبيرات المسار لا تختلف عن التعبيرات العادية. التعبير
المسار (.. | حدد (اكتب == "منطقي")) إخراج جميع المسارات إلى القيم المنطقية بتنسيق .، و فقط
تلك المسارات.

jq ´path (.a [0] .b) ´
فارغة
=> ["أ" ، 0 ، "ب"]

jq ´ [مسار (..)] ´
{"أ": [{"ب": 1}]}
=> [[]، ["a"]، ["a"، 0]، ["a"، 0، "b"]]

ديل (تعبير_المسار)
الوظيفة المدمجة من يزيل مفتاحًا وقيمته المقابلة من كائن.

jq ´del (.foo) ´
{"foo": 42، "bar": 9001، "baz": 42}
=> {"bar": 9001، "baz": 42}

jq ´del (. [1، 2]) ´
["foo"، "bar"، "baz"]
=> ["foo"]

إلى المدخلات ، من_المدخلات ، مع_المدخلات
تقوم هذه الوظائف بالتحويل بين كائن ومجموعة من أزواج المفتاح والقيمة. لو إلى المدخلات
يتم تمرير كائن ، ثم لكل منهما k: v الإدخال في المدخلات ، وتشمل مصفوفة الإخراج
{"مفتاح": k, "القيمة": v}.

من_المدخلات يفعل التحويل المعاكس ، و مع مدخلات (فو) هو اختزال لـ
إلى المدخلات | خريطة (فو) | من_المدخلات، مفيد للقيام ببعض العمليات على جميع المفاتيح و
قيم الكائن. من_المدخلات يقبل المفتاح والمفتاح والاسم والقيمة والقيمة كمفاتيح.

جي كيو "إلى_الإدخالات".
{"أ": 1 ، "ب": 2}
=> [{"key": "a"، "value": 1}، {"key": "b"، "value": 2}]

jq ´ من_المدخلات´
[{"key": "a"، "value": 1}، {"key": "b"، "value": 2}]
=> {"أ": 1 ، "ب": 2}

jq ´ with_entries (.key | = "KEY_" +.) ´
{"أ": 1 ، "ب": 2}
=> {"KEY_a": 1 ، "KEY_b": 2}

اختر (boolean_expression)
وظيفة حدد (فو) ينتج مدخلاته دون تغيير إذا فو يعود صحيحًا لتلك المدخلات ،
ولا ينتج أي مخرجات بخلاف ذلك.

إنه مفيد لتصفية القوائم: [1,2,3] | الخريطة (حدد (. >= 2)) سوف أعطيك [2,3].

jq ´map (حدد (.> = 2)) ´
[1,5,3,0,7]
=> [5,3,7،XNUMX،XNUMX،XNUMX]

jq ´. [] | حدد (.id == "second") ´
[{"id": "first"، "val": 1}، {"id": "second"، "val": 2}]
=> {"id": "second"، "val": 2}

المصفوفات شاء، العناصر التكرارية منطقية أعداد، الأعراف ، المنتهية ، سلاسل، فارغة القيم،
عددي
تحدد هذه العناصر المضمنة المدخلات التي هي عبارة عن صفائف أو كائنات أو عناصر متكررة (صفائف أو
الكائنات) ، القيم المنطقية ، والأرقام ، والأرقام العادية ، والأرقام المحدودة ، والسلاسل ، والقيمة الخالية ، وغير الفارغة
القيم و non-iterables على التوالي.

jq ´. [] | أرقام´
[[]، {}، 1، "foo"، null، true، false]
=> 1

فارغ
فارغ لا ترجع أي نتائج. لاشيء على الاطلاق. ليس حتى فارغة.

إنه مفيد في بعض الأحيان. ستعرف إذا كنت في حاجة إليها :)

jq ´1 ، فارغة ، 2´
فارغة
=> 1 ، 2

jq ´ [1,2،3 ، فارغ ، XNUMX] ´
فارغة
=> [1,2,3،XNUMX،XNUMX،XNUMX]

خطأ(رسالة)
ينتج خطأ ، تمامًا مثل .a يتم تطبيقه على قيم أخرى بخلاف القيم الخالية وستكون الكائنات ، ولكن
بالرسالة المعطاة كقيمة للخطأ.

$ __ loc__
ينتج كائنًا بمفتاح "ملف" ومفتاح "سطر" باسم الملف ورقم السطر
أين $ __ loc__ يحدث كقيم.

jq ´ حاول الخطأ ("\ ($ __ loc__)") catch .´
فارغة
=> "{\" ملف \ ": \" \"،\"خط 1}"

الخريطة (x) ، map_values ​​(x)
لأي مرشح x, خريطة (x) سيتم تشغيل هذا المرشح لكل عنصر من عناصر مصفوفة الإدخال ، و
إنتاج نواتج مصفوفة جديدة. خريطة (. + 1) سيزيد كل عنصر من عناصر مصفوفة
أرقام.

وبالمثل، map_values ​​(x) سيقوم بتشغيل هذا المرشح لكل عنصر ، لكنه سيعيد ملف
كائن عند تمرير كائن.

خريطة (x) ما يعادل [. [] | x]. في الواقع ، هذه هي الطريقة التي يتم تعريفها بها. بصورة مماثلة،
map_values ​​(x) كما يتم تعريف . [] |= x.

جيق خريطة (. + 1) ´
[1,2,3]
=> [2,3,4،XNUMX،XNUMX،XNUMX]

jq ´map_values ​​(. + 1) ´
{"أ": 1 ، "ب": 2 ، "ج": 3}
=> {"أ": 2 ، "ب": 3 ، "ج": 4}

مسارات، المسارات (node_filter) ، ممرات الأوراق
مسارات يخرج المسارات إلى جميع العناصر في مدخلاته (إلا أنه لا يخرج ملف
قائمة فارغة ، تمثل. بحد ذاتها).

المسارات (و) إخراج المسارات إلى أي قيم من أجلها f صحيح. هذا هو، المسارات (أرقام)
إخراج المسارات إلى جميع القيم الرقمية.

ممرات الأوراق هو اسم مستعار لـ مسارات (سلمية); ممرات الأوراق is إهمال وستتم إزالتها في
الإصدار الرئيسي التالي.

jq ´ [مسارات] ´
[1 ، [[] ، {"أ": 2}]]
=> [[0],[1],[1,0],[1,1],[1,1,"a"]]

jq ´ [مسارات (مقاسات)] ´
[1 ، [[] ، {"أ": 2}]]
=> [[0]، [1,1،XNUMX، "أ"]]

تضيف
مرشح تضيف يأخذ مصفوفة كمدخلات ، وينتج عناصر المصفوفة كمخرجات
معا. قد يعني هذا مُجمَّعًا أو متسلسلًا أو مدمجًا اعتمادًا على أنواع
عناصر مصفوفة الإدخال - القواعد هي نفسها تلك الخاصة بـ + عامل
(موصوف بالاعلى).

إذا كان الإدخال عبارة عن مصفوفة فارغة ، تضيف عائدات فارغة.

jq add´
["أ" ، "ب" ، "ج"]
=> "abc"

jq add´
[1 و 2 و 3]
=> 6

jq add´
[]
=> لاغية

أي، أي (حالة) ، أي (مولد ؛ حالة)
مرشح أي وقت يأخذ كمدخلات مصفوفة من القيم المنطقية ، وينتج صحيح كإخراج إذا
أي عنصر من عناصر المصفوفة هو صحيح.

إذا كان الإدخال عبارة عن مصفوفة فارغة ، أي وقت عائدات زائف.

أي (حالة) يطبق النموذج الشرط المعطى على عناصر مصفوفة الإدخال.

أي (مولد ؛ حالة) يطبق النموذج الشرط المحدد على جميع مخرجات
مولد معين.

JQ ´any´
[خطأ صحيح]
=> صحيح

JQ ´any´
[خطأ ، خطأ]
=> خطأ

JQ ´any´
[]
=> خطأ

الكل، كل (الحالة) ، الكل (المولد ؛ حالة)
مرشح من جميع يأخذ كمدخلات مصفوفة من القيم المنطقية ، وينتج صحيح كإخراج إذا
جميع عناصر المصفوفة صحيح.

الكل (الحالة) يطبق النموذج الشرط المعطى على عناصر مصفوفة الإدخال.

الكل (المولد ؛ حالة) يطبق النموذج الشرط المحدد على جميع مخرجات
مولد معين.

إذا كان الإدخال عبارة عن مصفوفة فارغة ، من جميع عائدات صحيح.

jq ´ all´
[خطأ صحيح]
=> خطأ

jq ´ all´
[حقيقي حقيقي]
=> صحيح

jq ´ all´
[]
=> صحيح

[يتطلب 1.5] تتسطح تتسطح (العمق)
مرشح تسطح يأخذ كمدخلات مصفوفة من المصفوفات المتداخلة ، وينتج مصفوفة مسطحة في
التي تم استبدال جميع المصفوفات داخل المصفوفة الأصلية بشكل متكرر بقيمها.
يمكنك تمرير وسيطة إليه لتحديد عدد مستويات التداخل المراد تسويتها.

تسطح2 مثل تسطح، ولكن الصعود إلى مستويين فقط في العمق.

جي ق ´flatten´
[1 ، [2] ، [[3]]]
=> [1 ، 2 ، 3]

جي ق ´تسطح(1) ´
[1 ، [2] ، [[3]]]
=> [1 ، 2 ، [3]]

جي ق ´flatten´
[[]]
=> []

جي ق ´flatten´
[{"foo": "bar"}، [{"foo": "baz"}]]
=> [{"foo": "bar"}، {"foo": "baz"}]

النطاق (يصل) ، النطاق (من ؛ تصل) النطاق (من ؛ حتى ؛ بواسطة)
نطاق دالة تنتج مجموعة من الأرقام. النطاق (4 ؛ 10) ينتج 6 أرقام ، من 4
(ضمناً) حتى 10 (حصرياً). يتم إنتاج الأرقام كمخرجات منفصلة. يستخدم
[النطاق (4 ؛ 10)] للحصول على النطاق كمصفوفة.

يُنشئ نموذج الوسيطة الواحدة أرقامًا من 0 إلى الرقم المحدد ، مع زيادة
1.

شكل الوسيطة اثنين يولد الأرقام من تبدأ من إلى حتى بزيادة قدرها 1.

شكل الوسيطة الثلاث يولد الأرقام تبدأ من إلى حتى مع زيادة by.

jq ´range (2 ؛ 4) ´
فارغة
=> 2 ، 3

jq ´ [المدى (2 ؛ 4)]
فارغة
=> [2,3،XNUMX،XNUMX،XNUMX]

jq ´ [نطاق(4)] ´
فارغة
=> [0,1,2,3،XNUMX،XNUMX،XNUMX]

jq ´ [المدى (0 ؛ 10 ؛ 3)]
فارغة
=> [0,3,6,9،XNUMX،XNUMX،XNUMX]

jq ´ [المدى (0 ؛ 10 ؛ -1)]
فارغة
=> []

jq ´ [المدى (0 ؛ -5 ؛ -1)]
فارغة
=> [0,-1,-2,-3,-4]

الطابق الثاني
الطابق الثاني دالة ترجع أرضية المدخلات الرقمية الخاصة بها.

jq floor´
3.14159
=> 3

الجذر التربيعي
الجذر التربيعي دالة ترجع الجذر التربيعي لمدخلاتها الرقمية.

جي كيو "sqrt".
9
=> 3

طن
طن دالة بتوزيع المدخلات كرقم. سيتم التحويل بتنسيق صحيح
السلاسل إلى معادلها الرقمي ، وترك الأرقام بمفردها ، وإعطاء خطأ في كل شيء آخر
إدخال.

jq ´. [] | طن
[1 ، "1"]
=> 1 ، 1

إلى سلسلة
إلى سلسلة تقوم الوظيفة بطباعة مدخلاتها كسلسلة. يتم ترك السلاسل دون تغيير ، وكل شيء
القيم الأخرى بترميز JSON.

jq ´. [] | إلى سلسلة
[1 ، "1" ، [1]]
=> "1" ، "1" ، "[1]"

نوع
نوع تقوم الدالة بإرجاع نوع الوسيطة الخاصة بها كسلسلة ، وهي إحدى القيم الخالية ،
منطقي أو رقم أو سلسلة أو صفيف أو كائن.

jq ´map (نوع) ´
[0، false، []، {}، null، "hello"]
=> ["رقم" ، "منطقي" ، "مصفوفة" ، "كائن" ، "فارغ" ، "سلسلة"]

لانهائية لا، لانهائي اسنان غير محدود غير طبيعي
يمكن أن تسفر بعض العمليات الحسابية عن قيم لا نهائية وقيم "ليست رقمًا" (NaN). ال
لانهائي عوائد مضمنة صحيح إذا كانت مدخلاته غير محدودة. ال isnan عوائد مضمنة صحيح
إذا كان الإدخال الخاص به هو NaN. ال لا نهاية يُرجع مضمّن قيمة موجبة لانهائية. ال نان
يعيد buildin قيمة NaN. ال غير طبيعي العنصر المدمج يعود صحيحًا إذا كان إدخاله رقمًا عاديًا.

لاحظ أن القسمة على الصفر تثير خطأ.

في الوقت الحالي ، لا تفعل معظم العمليات الحسابية التي تعمل على اللانهايات و NaNs والقياسات الفرعية
تثير الأخطاء.

jq ´. [] | (لانهائية *.) <0´
[-1 ، 1]
=> صح ، خطأ

jq ´ لانهائي ، نان | نوع
فارغة
=> "رقم" ، "رقم"

فرز، Sort_by (path_expression)
sort تعمل الدوال على فرز المدخلات الخاصة بها ، والتي يجب أن تكون مصفوفة. يتم فرز القيم في
الترتيب التالي:

· فارغة

· زائف

· صحيح

· أعداد

· سلاسل ، بالترتيب الأبجدي (حسب قيمة نقطة الرمز الموحد)

· المصفوفات بالترتيب المعجمي

· أشياء

ترتيب الأشياء معقد بعض الشيء: أولاً يتم مقارنتها بمقارنة
مجموعات من المفاتيح (كمصفوفات مرتبة بالترتيب) ، وإذا كانت مفاتيحها متساوية ، فإن القيم هي
مقارنة مفتاح تلو الآخر.

sort يمكن استخدامها للفرز حسب مجال معين من كائن ، أو عن طريق تطبيق أي مرشح jq.

ترتيب_بي (فو) يقارن بين عنصرين من خلال مقارنة نتيجة فو على كل عنصر.

جي ق ´ فرز
[8,3،6 ، لاغية ، XNUMX]
=> [خالية ، 3,6,8،XNUMX،XNUMX]

jq ´sort_by (.foo) ´
[{"foo": 4، "bar": 10}، {"foo": 3، "bar": 100}، {"foo": 2، "bar": 1}]
=> [{"foo": 2، "bar": 1}، {"foo": 3، "bar": 100}، {"foo": 4، "bar": 10}]

group_by (التعبير_المسار)
group_by (.foo) يأخذ كمدخلات مصفوفة ، ويجمع العناصر التي لها نفس الشيء .foo حقل
إلى مصفوفات منفصلة ، وينتج كل هذه المصفوفات كعناصر من مصفوفة أكبر ،
مرتبة حسب قيمة .foo الميدان.

يمكن استخدام أي تعبير jq ، وليس مجرد وصول إلى الحقل ، بدلاً من .foo. الفرز
الترتيب هو نفسه كما هو موضح في sort وظيفة أعلاه.

jq ´group_by (.foo) ´
[{"foo": 1، "bar": 10}، {"foo": 3، "bar": 100}، {"foo": 1، "bar": 1}]
=> [[{"foo": 1، "bar": 10}، {"foo": 1، "bar": 1}]، [{"foo": 3، "bar": 100}]]

دقيقة، كحد أقصى، min_by (path_exp) ، max_by (path_exp)
أوجد الحد الأدنى أو الأقصى لعنصر مصفوفة الإدخال.

min_by (path_exp) و max_by (path_exp) وظائف تسمح لك بتحديد ملف
حقل أو خاصية لفحصها ، على سبيل المثال min_by (.foo) يجد الكائن مع أصغر فو
الميدان.

جي كيو 'مين'
[5,4,2,7]
=> 2

jq ´max_by (.foo) ´
[{"foo": 1، "bar": 14}، {"foo": 2، "bar": 3}]
=> {"foo": 2، "bar": 3}

فريد، Unique_by (path_exp)
فريد من نوعه تأخذ الوظيفة كمدخلات مصفوفة وتنتج مصفوفة من نفس العناصر ، في
ترتيب مرتبة ، مع إزالة التكرارات.

Unique_by (path_exp) ستحتفظ الدالة بعنصر واحد فقط لكل قيمة تم الحصول عليها بواسطة
تطبيق الحجة. فكر في الأمر على أنه تكوين مصفوفة عن طريق إخراج عنصر واحد من كل عنصر
المجموعة التي تنتجها رأس التجميع.

جي كيو فريدة من نوعها
[1,2,5,3,5,3,1,3]
=> [1,2,3,5،XNUMX،XNUMX،XNUMX]

jq ´unique_by (.foo) ´
[{"foo": 1، "bar": 2}، {"foo": 1، "bar": 3}، {"foo": 4، "bar": 5}]
=> [{"foo": 1، "bar": 2}، {"foo": 4، "bar": 5}]

jq ´unique_by (الطول) ´
["مكتنزة" ، "لحم مقدد" ، "قطة" ، "زيز" ، "هليون"]
=> ["لحم مقدد" ، "مكتنزة" ، "هليون"]

عكس
هذه الوظيفة تعكس مصفوفة.

جي ق ´ عكس
[1,2,3,4]
=> [4,3,2,1،XNUMX،XNUMX،XNUMX]

يحتوي على (عنصر)
مرشح يحتوي على (ب) سينتج صحيحًا إذا تم احتواء b بالكامل داخل المدخلات. أ
يتم تضمين السلسلة B في سلسلة A إذا كانت B سلسلة فرعية لـ A. يتم تضمين صفيف B في
مصفوفة A إذا تم تضمين جميع العناصر الموجودة في B في أي عنصر في A. يكون الكائن B هو
مضمن في الكائن A إذا كانت جميع القيم الموجودة في B مضمنة في القيمة A مع
نفس المفتاح. يُفترض أن جميع الأنواع الأخرى موجودة في بعضها البعض إذا كانت متساوية.

jq ´ تحتوي على ("شريط") ´
"foobar"
=> صحيح

jq ´contains (["baz"، "bar"]) ´
["foobar"، "foobaz"، "blarp"]
=> صحيح

jq ´contains (["bazzzzz"، "bar"]) ´
["foobar"، "foobaz"، "blarp"]
=> خطأ

jq ´contains ({foo: 12، bar: [{barp: 12}]}) ´
{"foo": 12، "bar": [1,2،12، {"barp": 13، "blip": XNUMX}]}
=> صحيح

jq ´contains ({foo: 12، bar: [{barp: 15}]}) ´
{"foo": 12، "bar": [1,2،12، {"barp": 13، "blip": XNUMX}]}
=> خطأ

المؤشرات
تُخرج مصفوفة تحتوي على المؤشرات بتنسيق . أين s يحدث. قد يكون الإدخال عبارة عن مصفوفة بتنسيق
هذه الحالة إذا s عبارة عن مصفوفة ، فسيكون ناتج المؤشرات هو تلك التي توجد بها جميع العناصر .
تطابق هؤلاء من s.

jq مؤشرات ("،") ´
"a ، b ، cd ، efg ، hijk"
=> [3,7,12،XNUMX،XNUMX،XNUMX]

جي ق ´مؤشرات(1) ´
[0,1,2,1,3,1,4]
=> [1,3,5،XNUMX،XNUMX،XNUMX]

jq مؤشرات ([1,2،XNUMX]) ´
[0,1,2,3,1,4,2,5,1,2,6,7]
=> [1,8،XNUMX،XNUMX،XNUMX]

الفهرس (الفهارس) ، rindex (ق)
يخرج فهرس أول (مؤشر) أو الأخير (rindex) حدوث s في المدخلات.

jq ´index ("،") ´
"a ، b ، cd ، efg ، hijk"
=> 3

jq ´rindex ("،") ´
"a ، b ، cd ، efg ، hijk"
=> 12

في الداخل
مرشح داخل (ب) سينتج صحيحًا إذا تم احتواء المدخل بالكامل داخل ب. هو - هي
هو ، في الأساس ، نسخة معكوسة من يحتوي.

jq ´inside ("foobar") ´
"شريط"
=> صحيح

jq ´inside (["foobar"، "foobaz"، "blarp"]) ´
["باز"، "بار"]
=> صحيح

jq ´inside (["foobar"، "foobaz"، "blarp"]) ´
["bazzzzz"، "bar"]
=> خطأ

jq ´inside ({"foo": 12، "bar": [1,2،12، {"barp": 13، "blip": XNUMX}]}) ´
{"foo": 12، "bar": [{"barp": 12}]}
=> صحيح

jq ´inside ({"foo": 12، "bar": [1,2،12، {"barp": 13، "blip": XNUMX}]}) ´
{"foo": 12، "bar": [{"barp": 15}]}
=> خطأ

startswith (شارع)
النواتج صحيح لو . يبدأ بحجة السلسلة المحددة.

jq ´ [. [] | startswith ("foo")] ´
["fo"، "foo"، "barfoo"، "foobar"، "barfoob"]
=> [خطأ ، صحيح ، خطأ ، صحيح ، خطأ]

endswith (شارع)
النواتج صحيح لو . تنتهي مع وسيطة السلسلة المحددة.

jq ´ [. [] | endswith ("foo")] ´
["foobar"، "barfoo"]
=> [خطأ ، صحيح]

مجموعات مجموعات (ن)
إخراج جميع مجموعات عناصر المصفوفات في مصفوفة الإدخال. إذا أعطيت
حجة n، فإنه يقوم بإخراج كافة التوليفات من n تكرار مصفوفة الإدخال.

JQ تركيبات´
[[1,2،3] ، [4 ، XNUMX]]
=> [1 ، 3] ، [1 ، 4] ، [2 ، 3] ، [2 ، 4]

جي ق ´تركيبات(2) ´
[0، 1]
=> [0 ، 0] ، [0 ، 1] ، [1 ، 0] ، [1 ، 1]

لترمستر (شارع)
يخرج مدخلاته مع إزالة سلسلة البادئة المحددة ، إذا بدأ بها.

jq ´ [. [] | ltrimstr ("foo")] ´
["fo"، "foo"، "barfoo"، "foobar"، "afoo"]
=> ["fo"، ""، "barfoo"، "bar"، "afoo"]

rtrimstr (شارع)
تُخرج مُدخلاتها مع إزالة سلسلة اللاحقة المحددة ، إذا كانت تنتهي بها.

jq ´ [. [] | rtrimstr ("foo")] ´
["fo"، "foo"، "barfoo"، "foobar"، "foob"]
=> ["fo"، ""، "bar"، "foobar"، "foob"]

تفجر
يحول سلسلة إدخال إلى مصفوفة من أرقام نقطة كود السلسلة.

جي كيو "تنفجر".
"foobar"
=> [102,111,111,98,97,114،XNUMX،XNUMX،XNUMX]

ينفجر داخليا، ينهار للداخل
معكوس تنفجر.

جي كيو "ينفجر".
[65 و 66 و 67]
=> "ABC"

انقسم
يقسم سلسلة إدخال على وسيطة الفاصل.

jq ´split ("،") ´
"أ ، ب ، ج ، د ، هـ ،"
=> ["a"، "b، c، d"، "e"، ""]

انضم (شارع)
تربط مصفوفة العناصر المعطاة كمدخلات ، باستخدام الوسيطة كفاصل. انها
معكوس انقسم: هذا هو الجري انقسام ("فو") | انضم ("foo") على أي سلسلة إدخال
إرجاع سلسلة الإدخال قال.

jq ´join ("،") ´
["أ" ، "ب ، ج ، د" ، "هـ"]
=> "أ ، ب ، ج ، د ، هـ"

أسكي Ascii_upcase
انبعث نسخة من سلسلة الإدخال مع تحويل الأحرف الأبجدية (az و AZ) إلى
الحالة المحددة.

بينما (شرطي ؛ تحديث)
بينما (شرطي ؛ تحديث) تتيح لك الوظيفة تطبيق التحديث بشكل متكرر على . حتى كوند
هو زائف.

نلاحظ أن بينما (شرطي ؛ تحديث) يتم تعريفها داخليًا على أنها دالة jq متكررة. العودية
المكالمات داخل في حين لن تستهلك ذاكرة إضافية إذا تحديث تنتج واحدة على الأكثر
الإخراج لكل مدخلات. انظر المواضيع المتقدمة أدناه.

jq ´ [while (. <100؛. * 2)] ´
1
=> [1,2,4,8,16,32,64،XNUMX،XNUMX،XNUMX]

حتى (شرطي ؛ التالي)
حتى (شرطي ؛ التالي) تسمح لك الوظيفة بتطبيق التعبير بشكل متكرر التالي,
في البداية . ثم إلى ناتجها ، حتى كوند صحيح. على سبيل المثال ، يمكن استخدام هذا
لتنفيذ دالة مضروب (انظر أدناه).

نلاحظ أن حتى (شرطي ؛ التالي) يتم تعريفها داخليًا على أنها دالة jq متكررة. العودية
المكالمات داخل حتى() لن تستهلك ذاكرة إضافية إذا التالي تنتج واحدة على الأكثر
الإخراج لكل مدخلات. انظر المواضيع المتقدمة أدناه.

jq ´ [.، 1] | حتى (. [0] <1؛ [. [0] - 1،. [1] *. [0]]) |. [1] ´
4
=> 24

يتكرر (و) ، يعيد تنفيذ، متكرر (و ؛ شرط)، recurse_down
متكرر (و) تسمح لك الوظيفة بالبحث من خلال بنية متكررة واستخراجها
بيانات مثيرة للاهتمام من جميع المستويات. افترض أن مدخلاتك تمثل نظام ملفات:

{"الاسم": "/"، "الأطفال": [
{"اسم": "/ بن"، "الأطفال": [
{"اسم": "/ بن / ليرة سورية"، "الأطفال": []}،
{"اسم": "/ بن / ش"، "الأطفال": []}]}،
{"اسم": "/ الرئيسية"، "الأطفال": [
{"name": "/ home / stephen"، "children": [
{"name": "/ home / stephen / jq"، "children": []}]}]}]}

افترض الآن أنك تريد استخراج جميع أسماء الملفات الموجودة. تحتاج إلى استرداد . اسم,
. الأطفال []. الاسم, . الأطفال []. الأطفال []. الاسم، وما إلى ذلك وهلم جرا. يمكنك القيام بذلك عن طريق:

تتكرر (.children []) | .اسم

عندما دعا دون جدال ، يعيد تنفيذ ما يعادل يعيد تنفيذ(.[]؟).

متكرر (و) مطابق لـ متكرر (و ؛ . != باطل) ويمكن استخدامها دون مخاوف بشأن
عمق العودية.

متكرر (و ؛ حالة) هو المولد الذي يبدأ بالانبعاث. ثم ينبعث بدوره
. | f،. | f | f،. | f | f | f، ... طالما أن القيمة المحسوبة تفي بالشرط. ل
على سبيل المثال ، لتوليد جميع الأعداد الصحيحة ، على الأقل من حيث المبدأ ، يمكن للمرء أن يكتب يتكرر (. + 1 ؛
صحيح).

لأسباب إرثية ، recurse_down موجود كاسم مستعار للاتصال يعيد تنفيذ بدون جدال.
يعتبر هذا الاسم المستعار إهمال وستتم إزالتها في الإصدار الرئيسي التالي.

المكالمات المتكررة في يعيد تنفيذ لن تستهلك ذاكرة إضافية متى f تنتج في
معظم المخرجات الفردية لكل مدخلات.

jq ´recurse (.foo []) ´
{"foo": [{"foo": []}، {"foo": [{"foo": []}]}]}
=> {"foo": [{"foo": []}، {"foo": [{"foo": []}]}]}، {"foo": []}، {"foo": [{"فو فو":[]}

جي كيو "العودة".
{"أ": 0 ، "ب": [1]}
=> {"a": 0، "b": [1]}، 0، [1]، 1

jq ´recurse (. *. ؛. <20) ´
2
=> 2، 4، 16

..
اختصار لـ يعيد تنفيذ بدون جدال. تم إعداد هذا ليشبه XPath //
المشغل أو العامل. لاحظ أن ..أ لا يعمل؛ استعمال .. | ا في حين أن. في المثال أدناه نستخدم
.. |. للعثور على جميع قيم مفاتيح الكائنات "أ" في أي كائن موجود "أدناه" ..

.. | .a؟ ´
[[{"أ": 1}]]
=> 1

الحياة الفطرية
لإخراج كائن يمثل بيئة jq.

jq ´env.PAGER´
فارغة
=> "أقل"

تبديل موضع
قلب مصفوفة خشنة (مصفوفة من المصفوفات). الصفوف مبطنة بالقيم الخالية لذا فإن ملف
النتيجة دائما مستطيلة.

جي كيو "تبديل".
[[1] ، [2,3،XNUMX]]
=> [[1,2،3]، [خالية، XNUMX]]

bsearch (x)
يُجري bsearch (x) بحثًا ثنائيًا عن x في مصفوفة الإدخال. إذا تم فرز الإدخال و
يحتوي على x ، ثم سيعيد bsearch (x) فهرسه في المصفوفة ؛ خلاف ذلك ، إذا كانت المصفوفة
إذا تم فرزها ، فسيعود (-1 - ix) حيث تمثل ix نقطة إدخال بحيث تقوم المصفوفة بذلك
لا يزال يتم فرزها بعد إدخال x في التاسع. إذا لم يتم فرز المصفوفة ، فإن bsearch (x)
سيعيد عددًا صحيحًا ربما لا يهم.

جي ق ´com.bsearch(0) ´
[0,1]
=> 0

جي ق ´com.bsearch(0) ´
[1,2,3]
=> -1

جي ق ´com.bsearch(4) بالشكل $ ix | إذا كان $ ix <0 ثم. [- (1 + $ ix)] = 4 else. نهاية
[1,2,3]
=> [1,2,3,4،XNUMX،XNUMX،XNUMX]

خيط إقحام - \ (فو)
داخل سلسلة ، يمكنك وضع تعبير داخل أقواس بعد الشرطة المائلة للخلف. مهما كانت
سيتم إقحام إرجاع التعبير في السلسلة.

jq ´ "الإدخال كان \ (.) ، وهو أقل من \ (. + 1)" ´
42
=> "الإدخال كان 42 ، وهو أقل من 43"

تحول إلى من JSON
توجسون و فرومجسون قيم تفريغ المبنية كنصوص JSON أو تحليل نصوص JSON إلى
القيم ، على التوالي. يختلف tojson builtin عن الحبل في عودة السلسلة
السلاسل غير معدلة ، بينما يقوم tojson بترميز السلاسل كسلاسل JSON.

jq ´ [. [] | tostring]
[1، "foo"، ["foo"]]
=> ["1"، "foo"، "[\" foo \ "]"]

jq ´ [. [] | tojson] ´
[1، "foo"، ["foo"]]
=> ["1"، "\" foo \ ""، "[\" foo \ "]"]

jq ´ [. [] | tojson | fromjson] ´
[1، "foo"، ["foo"]]
=> [1، "foo"، ["foo"]]

شكل سلاسل و الهروب
foo يتم استخدام بناء الجملة لتنسيق وإلغاء السلاسل ، وهو أمر مفيد لبناء عناوين URL ،
مستندات بلغة مثل HTML أو XML وما إلى ذلك. foo يمكن استخدامها كمرشح على
حالات الهروب المحتملة هي:

@نص:

دعوات إلى سلسلة، راجع هذه الوظيفة للحصول على التفاصيل.

json:

تسلسل الإدخال كـ JSON.

@لغة البرمجة:

يطبق هروب HTML / XML ، من خلال تعيين الأحرف <> & ´ " لكيانهم
مرادف <, >, و, ', ".

تضمين التغريدة:

يطبق ترميز النسبة المئوية ، عن طريق تعيين جميع أحرف URI المحجوزة إلى ملف ٪ XX تسلسل.

csv:

يجب أن يكون الإدخال عبارة عن مصفوفة ، ويتم تقديمه بتنسيق CSV بعلامات اقتباس مزدوجة لـ
السلاسل والاقتباسات التي أفلت من التكرار.

tsv:

يجب أن يكون الإدخال عبارة عن مصفوفة ، ويتم تقديمه على هيئة TSV (قيم مفصولة بعلامات جدولة). كل
ستتم طباعة مجموعة الإدخال كسطر واحد. الحقول مفصولة بعلامة تبويب واحدة
(أسكي 0x09). إدخال أحرف سطر التغذية (ascii 0x0a) ، حرف العودة (ascii
0x0d) ، علامة التبويب (أسكي 0x09) والشرطة المائلة للخلف (أسكي 0x5c) سيتم إخراجها على أنها هروب
متواليات \n, \r, \t, \\ على التوالي.

sh:

يتم تخطي الإدخال المناسب للاستخدام في سطر الأوامر لقشرة POSIX. إذا كان
المدخلات عبارة عن صفيف ، سيكون الإخراج عبارة عن سلسلة من السلاسل المفصولة بمسافة.

ههههههههههه:

يتم تحويل الإدخال إلى base64 كما هو محدد بواسطة RFC 4648.

يمكن دمج بناء الجملة هذا مع استيفاء السلسلة بطريقة مفيدة. يمكنك متابعة أ
foo رمز بسلسلة حرفية. محتويات سلسلة الإرادة الحرفية ليس يهرب.
ومع ذلك ، سيتم تخطي جميع عمليات الاستيفاء التي تتم داخل تلك السلسلة الحرفية. على سبيل المثال،

uri "https://www.google.com/search؟q=\(.search)"

سينتج الإخراج التالي للإدخال {"بحث": "ماذا is jq؟ "}:

"https://www.google.com/search؟q=what٪20is٪20jq٪3F"

لاحظ أن الشرطات المائلة وعلامة الاستفهام وما إلى ذلك في عنوان URL لا يتم تخطيها لأنها كانت جزءًا
من السلسلة الحرفية.

jq ´ @ html´
"هذا يعمل إذا كانت x <y"
=> "هذا يعمل إذا كانت x <y"

jq ´ @ sh "echo \ (.)" ´
"البيرة O´Hara´s"
=> "صدى صوت ´O´ \\ ´´Hara´ \\ ´´s Ale´"

تمور
يوفر jq بعض وظائف معالجة التاريخ الأساسية ، مع بعض المستويات العالية والمنخفضة
البنايات. في جميع الحالات ، تتعامل هذه البنايات حصريًا مع الوقت في التوقيت العالمي المنسق.

من تاريخه 8601 التوزيعات المضمنة للبيانات بتنسيق ISO 8601 لعدد من الثواني
منذ عهد يونكس (1970-01-01T00: 00: 00Z). ال توديتيسو 8601 المدمج يفعل معكوس.

من التاريخ يحلل المضمنة سلاسل التاريخ والوقت. حاليا من التاريخ يدعم ISO 8601 فقط
سلاسل التاريخ والوقت ، ولكن في المستقبل ستحاول تحليل سلاسل التاريخ والوقت في المزيد
الأشكال.

حتى الآن buildin هو اسم مستعار لـ توديتيسو 8601.

الآن المدمج في الوقت الحالي ، بالثواني منذ عهد يونكس.

يتم أيضًا توفير واجهات jq منخفضة المستوى لوظائف وقت مكتبة C: com.strptime,
com.strftime, com.mktimeو com.GMtime. ارجع إلى وثائق نظام التشغيل المضيف للحصول على ملف
سلاسل التنسيق المستخدمة من قبل com.strptime و com.strftime. ملاحظة: هذه ليست بالضرورة مستقرة
واجهات في jq ، خاصة فيما يتعلق بوظائف الترجمة الخاصة بهم.

com.GMtime مدمج يستهلك عددًا من الثواني منذ عهد Unix ويخرج ملف "معطل
down time "تمثيل الوقت كمصفوفة من الأرقام التي تمثل (بهذا الترتيب):
السنة ، الشهر (على أساس الصفر) ، اليوم من الشهر ، الساعة من اليوم ، الدقيقة من
الساعة ، والثاني من الدقيقة ، واليوم من الأسبوع ، واليوم من العام - الكل
على أساس واحد ما لم ينص على خلاف ذلك.

com.mktime مدمج يستهلك "تقسيم الوقت" تمثيلات الوقت الناتج عن طريق com.GMtime
و com.strptime.

strptime (fmt) يوزع المضمنة سلاسل الإدخال المطابقة لملف معاهدة المواد الانشطارية جدال. الإخراج في
استهلك تمثيل "الوقت المقسم" com.GMtime والإخراج بواسطة com.mktime.

strftime (fmt) تنسيقات مدمجة وقت بالتنسيق المحدد.

سلاسل التنسيق لـ com.strptime و com.strftime موصوفة في مكتبة C نموذجية
توثيق. سلسلة التنسيق الخاصة بـ ISO 8601 datetime هي "٪ Y-٪ m-٪ dT٪ H:٪ M:٪ SZ".

قد لا يدعم jq بعضًا من وظائف هذا التاريخ أو كلها في بعض الأنظمة.

jq ´ من تاريخ
"2015-03-05T23:51:47Z"
=> 1425599507

jq ´strptime ("٪ Y-٪ m-٪ dT٪ H:٪ M:٪ SZ") ´
"2015-03-05T23:51:47Z"
=> [2015,2,5,23,51,47,4,63،XNUMX،XNUMX،XNUMX]

jq ´strptime ("٪ Y-٪ m-٪ dT٪ H:٪ M:٪ SZ") | mktime´
"2015-03-05T23:51:47Z"
=> 1425599507

الشروط لأي لبس مقارنات


== ، !=
سينتج التعبير ´a == b´ صحيحًا إذا كانت نتيجة a و b متساوية (أي ،
إذا كانت تمثل مستندات JSON مكافئة) و ​​"خطأ" بخلاف ذلك. على وجه الخصوص ، السلاسل
لا تعتبر مساوية للأرقام. إذا كنت قادمًا من Javascript ، فإن jq´s == تشبه
Javascript´s === - اعتبار القيم متساوية فقط عندما يكون لها نفس النوع وكذلك
نفس القيمة.

! = "غير متساوية" ، و ´a! = b´ تُرجع القيمة المعاكسة لـ ´a == b´

jq ´. [] == 1´
[1، 1.0، "1"، "banana"]
=> صحيح ، صحيح ، خطأ ، خطأ

إذا، ثم بين آخر
if A then B آخر C النهاية سوف تتصرف مثل B if A ينتج قيمة أخرى غير false أو
لاغى ، ولكن يتصرف مثل C غير ذلك.

التحقق من وجود خطأ أو قيمة خالية هو مفهوم أبسط عن "الصدق" مما هو موجود في جافا سكريبت
أو Python ، ولكن هذا يعني أنه سيتعين عليك أحيانًا أن تكون أكثر وضوحًا بشأن الحالة
الذي تريده: لا يمكنك اختبار ما إذا كانت السلسلة فارغة باستخدام if . اسم then A آخر B النهاية,
ستحتاج إلى شيء أشبه if (.اسم | الطول) > 0 then A آخر B النهاية بدلا من ذلك.

إذا أدى الشرط أ إلى نتائج متعددة ، فسيتم اعتباره "صحيحًا" إذا كان أي من هذه النتائج
النتائج ليست خاطئة أو لاغية. إذا لم ينتج عنه أي نتائج ، فسيتم اعتباره خطأ.

يمكن إضافة المزيد من الحالات إلى حالة استخدام أليف A then B بناء الجملة.

jq ´if. == 0 إذن

"صفر" elif. == 1 ثم "واحد" آخر "كثير" end´ 2 => "كثير"

>, > = ، <= ، <
عوامل المقارنة >, >=, <=, < العودة ما إذا كانت حجتهم اليسرى أكبر من ،
أكبر من أو يساوي ، أقل من أو يساوي أو أقل من حجتهم الصحيحة
(على التوالي).

الترتيب هو نفسه الذي تم وصفه لـ sort، في الاعلى.

جي ق ´. <5´
2
=> صحيح

و / أو لا
يدعم jq عوامل التشغيل المنطقية العادية و / أو لا. لديهم نفس معيار الحقيقة
كما لو أن التعبيرات - false و null تعتبر "قيمًا خاطئة" ، وأي شيء آخر هو a
"قيمة حقيقية".

إذا أعطى معامل أحد هذه العوامل نتائج متعددة ، فإن العامل نفسه
ستنتج نتيجة لكل مدخل.

ليس هي في الواقع وظيفة مضمنة وليست عاملاً ، لذلك يطلق عليها كعامل تصفية لـ
الأشياء التي يمكن توصيلها بالأنابيب بدلاً من بناء جملة خاص ، كما هو الحال في .foo و .شريط | ليس.

هذه الثلاثة تنتج فقط القيم "صواب" و "خطأ" ، وبالتالي فهي مفيدة فقط للأصلية
العمليات المنطقية ، بدلاً من لغة Perl / Python / Ruby الشائعة
"value_that_may_be_null أو الافتراضي". إذا كنت تريد استخدام هذا الشكل من "أو" ، الاختيار بين
قيمتين بدلاً من تقييم الشرط ، راجع عامل التشغيل "//" أدناه.

jq ´42 و "سلسلة" ´
فارغة
=> صحيح

jq ´ (صح ، خطأ) أو خطأ´
فارغة
=> صح ، خطأ

jq ´ (صواب ، صحيح) و (صواب ، خطأ) ´
فارغة
=> صح ، خطأ ، صحيح ، خطأ

jq ´ [صحيح ، خطأ | ليس
فارغة
=> [خطأ ، صحيح]

البديل عامل - //
مرشح النموذج a // b ينتج نفس النتائج مثل a، إذا a ينتج نتائج أخرى
من زائف و فارغة. غير ذلك، a // b ينتج نفس النتائج مثل b.

هذا مفيد لتوفير الإعدادات الافتراضية: .foo // 1 ستقيم ل 1 إذا لم يكن هناك .foo
عنصر في الإدخال. إنه مشابه لكيفية or يستخدم أحيانًا في Python (jq´s or عامل
محجوز للعمليات المنطقية بدقة).

جي كيو ´.فو // 42´
{"فو": 19}
=> 19

جي كيو ´.فو // 42´
{}
=> 42

حاول التقاط
يمكن اكتشاف الأخطاء باستخدام محاولة EXP قبض EXP. يتم تنفيذ التعبير الأول ، وإذا
فشل ثم يتم تنفيذ الثانية مع رسالة الخطأ. إخراج المعالج ، إذا
أي ، هو الإخراج كما لو كان ناتج التعبير لمحاولة.

محاولة EXP يستخدم النموذج فارغ باعتباره معالج الاستثناء.

jq ´ try. catch ". ليس كائنًا" ´
صحيح
=> ". ليس كائنًا"

jq ´ [. [] | جرب. أ] ´
[{} ، صحيح ، {"أ": 1}]
=> [خالية ، 1]

jq ´ حاول الخطأ ("بعض الاستثناءات") catch
صحيح
=> "بعض الاستثناءات"

كسر خارج of مراقبة الهياكل
الاستخدام المريح للتجربة / الصيد هو الخروج من هياكل التحكم مثل تخفيض, foreach,
في حين، وهلم جرا.

فمثلا:

# كرر تعبيرًا حتى يرفع "فاصل" كملف
# خطأ ، ثم توقف عن التكرار دون إعادة رفع الخطأ.
# ولكن إذا كان الخطأ الذي تم اكتشافه ليس "كسر" ثم أعد رفعه.
حاول تكرار (exp) catch. == "break" ثم إفراغ خطأ else ؛

يحتوي jq على صيغة للتسميات المعجمية المسماة لـ "break" أو "go (back) to":

تسمية $ خارج | ... كسر $ ...

استراحة $ label_name التعبير سيجعل البرنامج يتصرف كما لو كان الأقرب
(إلى اليسار) ملصق $ label_name أنتج فارغ.

العلاقة بين استراحة وما يقابلها ملصق معجمي: يجب أن تكون التسمية
"مرئي" من الاستراحة.

للخروج من تخفيض، على سبيل المثال:

تسمية $ خارج | تقليل. [] كعنصر $ (null؛ if. == false ثم كسر $ out else ... end)

ينتج عن برنامج jq التالي خطأ نحوي:

كسر دولار

لأنه لا يوجد تسمية $ خارج مرئي.

? عامل
? عامل استخدام EXP؟، هو اختصار لـ محاولة EXP.

jq ´ [. [] | (.a)؟] ´
[{} ، صحيح ، {"أ": 1}]
=> [خالية ، 1]

منتظم التعبيرات (PCR)


يستخدم jq مكتبة Oniguruma للتعبير العادي ، كما يفعل php و ruby ​​و TextMate و Sublime Text و
إلخ ، لذا سيركز الوصف هنا على تفاصيل jq.

يتم تحديد عوامل تصفية jq regex بحيث يمكن استخدامها باستخدام أحد هذه الأنماط:

STRING | مرشح (REGEX)
STRING | مرشح (REGEX ، FLAGS)
STRING | مرشح ([REGEX])
STRING | مرشح ([REGEX ، FLAGS])

حيث: * STRING و REGEX و FLAGS هي سلاسل jq وتخضع لاستيفاء سلسلة jq ؛ *
يجب أن يكون REGEX ، بعد استيفاء السلسلة ، تعبيرًا صحيحًا عن PCRE ؛ * الفلتر هو واحد من تجربه بالعربي,
مباراةالطرق أو أسر، كما هو موضح أدناه.

FLAGS عبارة عن سلسلة تتكون من واحدة من أكثر من العلامات المدعومة:

· g - بحث عالمي (ابحث عن كل التطابقات وليس الأول فقط)

· i - بحث حساس لحالة الأحرف

· m - وضع متعدد الخطوط (´.´ سيتطابق مع الخطوط الجديدة)

· n - تجاهل المباريات الفارغة

· p - تم تمكين وضعي s و m

· s - وضع الخط المفرد (´ ^ ´ -> ´ \ A´، ´ $ ´ -> ´ \ Z´)

· l - البحث عن أطول مباريات ممكنة

· x - تنسيق regex ممتد (تجاهل المسافات والتعليقات)

لمطابقة المسافة البيضاء في نمط x ، استخدم مفتاح escape مثل \ s ، على سبيل المثال

· اختبار ("a \ sb" ، "x").

لاحظ أنه يمكن أيضًا تحديد بعض العلامات داخل REGEX ، على سبيل المثال

· jq -n ´ ("اختبار" ، "TEst" ، "teST" ، "اختبار") | اختبار ("(؟ i) te (؟ - i) st") ´

يقيّم إلى: صحيح ، صحيح ، خطأ ، خطأ.

[يتطلب 1.5] اختبار (فال) ، اختبار (regex؛ الأعلام)
اعجاب مباراة، لكنه لا يعيد كائنات مطابقة فقط صحيح or زائف أم لا
يتطابق التعبير العادي مع الإدخال.

jq ´test ("foo") ´
"فو"
=> صحيح

jq ´. [] | test ("abc # يتم تجاهل المسافات" ؛ "ix") ´
["xabcd"، "ABC"]
=> صحيح ، صحيح

[يتطلب 1.5] مباراة (فال) ، تطابق (regex ؛ الأعلام)
مباراة يخرج كائنًا لكل مباراة يجدها. تحتوي المطابقات على الحقول التالية:

· عوض - الإزاحة في نقاط التشفير UTF-8 من بداية الإدخال

· الطول - الطول في نقاط كود UTF-8 للمباراة

· سلسلة - الخيط المطابق

· يلتقط - مجموعة من الأشياء التي تمثل مجموعات الالتقاط.

يحتوي التقاط كائنات المجموعة على الحقول التالية:

· عوض - الإزاحة في نقاط التشفير UTF-8 من بداية الإدخال

· الطول - الطول في نقاط تشفير UTF-8 لمجموعة الالتقاط هذه

· سلسلة - الخيط الذي تم التقاطه

· الاسم - اسم مجموعة الالتقاط (أو فارغة إذا كان بدون اسم)

يؤدي أسر المجموعات التي لا تتطابق مع أي شيء إلى إرجاع تعويض قدره -1

jq ´match ("(abc) +" ؛ "g") ´
"abc abc"
=> {"offset": 0، "length": 3، "string": "abc"، "captures": [{"offset": 0، "length": 3، "string": "abc"، " الاسم ": null}]}، {" offset ": 4،" length ": 3،" string ":" abc "،" captures ": [{" offset ": 4،" length ": 3،" string " : "abc"، "name": null}]}

jq ´match ("foo") ´
"foo bar foo"
=> {"offset": 0، "length": 3، "string": "foo"، "captures": []}

jq ´match (["foo"، "ig"]) ´
"foo bar FOO"
=> {"offset": 0، "length": 3، "string": "foo"، "captures": []}، {"offset": 8، "length": 3، "string": "FOO "،" يلتقط ": []}

jq ´match ("foo (؟ شريط)؟ foo "؛" ig ") ´
"foo bar foo foo foo"
=> {"offset": 0، "length": 11، "string": "foo bar foo"، "captures": [{"offset": 4، "length": 3، "string": "bar" ، "الاسم": "bar123"}]}، {"offset": 12، "length": 8، "string": "foo foo"، "captures": [{"offset": -1، "length" : 0، "string": null، "name": "bar123"}]}

jq ´ [match ("."؛ "g")] | الطول
"abc"
=> 3

[يتطلب 1.5] التقاط (فال) ، التقاط (regex؛ الأعلام)
يجمع اللقطات المسماة في كائن JSON ، مع اسم كل لقطة كمفتاح ،
والسلسلة المطابقة كقيمة مقابلة.

jq ´capture ("(؟ [az] +) - (؟ [0-9] +) ") ´
"xyzzy-14"
=> {"a": "xyzzy"، "n": "14"}

[يتطلب 1.5] مسح (regex) ، مسح (regex؛ الأعلام)
انبعث دفقًا من السلاسل الفرعية غير المتداخلة للمدخلات التي تتطابق مع regex في
وفقًا للأعلام ، إن وجدت. إذا لم يكن هناك تطابق ، يكون الدفق
فارغة. لالتقاط جميع التطابقات لكل سلسلة إدخال ، استخدم المصطلح [ على سبيل المثال ]، على سبيل المثال [
مسح (regex) ].

انقسام (regex ؛ الأعلام)
للتوافق مع الإصدارات السابقة ، انقسم على سلسلة ، وليس regex.

[يتطلب 1.5] انشقاقات (regex) ، انشقاقات (regex ؛ الأعلام)
هذه توفر نفس النتائج مثل الخاصة بهم انقسم النظراء ، ولكن كتدفق بدلاً من ملف
مجموعة مصفوفة.

[يتطلب 1.5] فرعي (regex ؛ إلى سلسلة) فرعي (regex ؛ سلسلة؛ الأعلام)
انبعث السلسلة التي تم الحصول عليها عن طريق استبدال المطابقة الأولى من regex في سلسلة الإدخال بـ
إلى سلسلة، بعد الاستيفاء. إلى سلسلة يجب أن تكون سلسلة jq ، وقد تحتوي على مراجع
لالتقاط اسمه. يتم تقديم اللقطات المسماة ، في الواقع ، ككائن JSON (مثل
شيدت من قبل أسر) إلى إلى سلسلة، لذلك فإن الإشارة إلى متغير تم التقاطه باسم "x" يمكن أن تكون
تأخذ النموذج: "(.x)".

[يتطلب 1.5] gsub (regex ؛ سلسلة)، gsub (regex ؛ سلسلة؛ الأعلام)
com.gsub مثل فرعية ولكن يتم استبدال جميع مرات حدوث regex غير المتداخلة بامتداد
السلسلة ، بعد الاستيفاء.

التبادل المتقدم المزايا


المتغيرات هي ضرورة مطلقة في معظم لغات البرمجة ، لكنها مهملة
إلى "ميزة متقدمة" في jq.

في معظم اللغات ، المتغيرات هي الوسيلة الوحيدة لتمرير البيانات. إذا قمت بحساب
وتريد استخدامها أكثر من مرة ، فسيلزمك تخزينها في متغير. إلى
تمرير قيمة إلى جزء آخر من البرنامج ، ستحتاج إلى هذا الجزء من البرنامج
حدد متغيرًا (كمعامل دالة ، أو عضو كائن ، أو أيًا كان) لوضعه
البيانات.

من الممكن أيضًا تحديد الوظائف في jq ، على الرغم من أن هذه الميزة أكبرها
use هو تحديد مكتبة jq القياسية (العديد من وظائف jq مثل رسم خريطة و جد هي في الواقع
مكتوب في jq).

jq لديها عوامل اختزال ، وهي قوية جدًا ولكنها صعبة بعض الشيء. مرة أخرى ، هذه هي
تستخدم في الغالب داخليًا ، لتحديد بعض الأجزاء المفيدة من مكتبة jq´s القياسية.

قد لا يكون الأمر واضحًا في البداية ، لكن jq تدور حول المولدات (نعم ، كما هو موجود غالبًا في
لغات اخرى). يتم توفير بعض المرافق للمساعدة في التعامل مع المولدات.

بعض الحد الأدنى من دعم الإدخال / الإخراج (إلى جانب قراءة JSON من الإدخال القياسي ، وكتابة JSON إلى
الإخراج القياسي) متاح.

أخيرًا ، هناك نظام وحدة / مكتبة.

المتغيرات
في jq ، تحتوي جميع المرشحات على مدخلات ومخرجات ، لذا فإن السباكة اليدوية ليست ضرورية
تمرير قيمة من جزء من البرنامج إلى الجزء التالي. العديد من التعبيرات ، على سبيل المثال a + b,
قم بتمرير مدخلاتهم إلى تعبيرين فرعيين متميزين (هنا a و b كلاهما اجتاز نفس الشيء
المدخلات) ، لذا فإن المتغيرات ليست ضرورية عادةً لاستخدام القيمة مرتين.

على سبيل المثال ، يتطلب حساب متوسط ​​قيمة مصفوفة من الأرقام عددًا قليلاً
متغيرات في معظم اللغات - واحدة على الأقل تحتوي على المصفوفة ، وربما واحدة لكل عنصر
أو لعداد حلقة. في jq ، إنه ببساطة تضيف / الطول - ال تضيف التعبير معطى ال
صفيف وينتج مجموعها ، و الطول يتم إعطاء التعبير المصفوفة وينتج الخاص به
الطول.

لذلك ، هناك طريقة أنظف لحل معظم المشاكل في jq بشكل عام من تحديد المتغيرات.
ومع ذلك ، في بعض الأحيان يقومون بتسهيل الأمور ، لذلك يتيح لك jq تحديد المتغيرات باستخدام
التعبير as متغير $. تبدأ جميع أسماء المتغيرات بـ $. إليكم نسخة أقبح قليلاً
لمثال متوسط ​​الصفيف:

الطول كـ $ array_length | إضافة / $ array_length

سنحتاج إلى مشكلة أكثر تعقيدًا لإيجاد حالة يكون فيها استخدام المتغيرات في الواقع
يجعل حياتنا أسهل.

لنفترض أن لدينا مجموعة من منشورات المدونة ، مع حقلي "المؤلف" و "العنوان" ، وآخر
كائن يُستخدم لتعيين أسماء مستخدمين المؤلفين إلى أسماء حقيقية. مدخلاتنا تبدو كما يلي:

{"posts": [{"title": "Frist psot"، "author": "anon"}،
{"العنوان": "مقال مكتوب بشكل جيد" ، "مؤلف": "شخص 1"}] ،
"realnames": {"anon": "Anonymous Coward"،
"شخص 1": "شخص ماكفرسون"}}

نريد إنتاج منشورات تحتوي على اسم حقيقي في حقل المؤلف ، كما في:

{"title": "Frist psot"، "author": "Anonymous Coward"}
{"العنوان": "مقالة مكتوبة جيدًا" ، "المؤلف": "الشخص ماكفرسون"}

نستخدم متغيرًا ، أسماء $ ، لتخزين كائن realnames ، حتى نتمكن من الرجوع إليه لاحقًا
عند البحث عن أسماء مستخدمي المؤلف:

.realnames كـ $ names | .posts [] | {العنوان ، المؤلف: $ names [.author]}

التعبير إكسب as $x | يعني: لكل قيمة تعبير إكسب، قم بتشغيل ما تبقى من
خط الأنابيب مع المدخلات الأصلية بالكامل ، ومع $x على تلك القيمة. هكذا as
تعمل كشيء من حلقة foreach.

تماما كما {فو} هي طريقة سهلة للكتابة {فو: .فو}، وبالتالي {$ foo} هي طريقة سهلة للكتابة
{foo: $ foo}.

يمكن التصريح عن متغيرات متعددة باستخدام واحد as التعبير عن طريق توفير نمط
الذي يتطابق مع بنية الإدخال (يُعرف هذا باسم "التدمير"):

. كـ {realnames: $ names، posts: [$ first، $ second]} | ...

التصريحات المتغيرة في أنماط المصفوفات (على سبيل المثال ، . as [$ أولاً ، $ الثانية]) تلتزم بـ
عناصر المصفوفة الواردة من العنصر عند الفهرس صفر وما فوق ، بالترتيب. عندما لا يكون هناك
قيمة في الفهرس لعنصر نمط مصفوفة ، فارغة مرتبط بهذا المتغير.

يتم تحديد نطاق المتغيرات فوق باقي التعبير الذي يحددها ، لذلك

.realnames كـ $ names | (.posts [] | {title، author: $ names [.author]})

ستعمل ، ولكن

(.realnames كـ $ names | .posts []) | {العنوان ، المؤلف: $ names [.author]}

متعود.

بالنسبة لمنظري لغة البرمجة ، من الأدق القول إن متغيرات jq صحيحة
الارتباطات ذات النطاق المعجمي. على وجه الخصوص لا توجد طريقة لتغيير قيمة ملزم ؛
يمكن للمرء فقط إعداد ربط جديد بنفس الاسم ، ولكن لن يكون مرئيًا في المكان
القديم كان.

jq ´.bar بالشكل $ x | .foo | . + $ x´
{"foo": 10 ، "شريط": 200}
=> 210

جي ق ´. كـ $ i | [(. * 2 |. مثل $ i | $ i) ، $ i] ´
5
=> [10,5،XNUMX،XNUMX،XNUMX]

جي ق ´. كـ [$ a، $ b، {c: $ c}] | $ a + $ b + $ c´
[2 ، 3 ، {"ج": 4 ، "د": 5}]
=> 9

jq ´. [] بالشكل [$ a، $ b] | {أ: $ a، b: $ b} ´
[[0] ، [0 ، 1] ، [2 ، 1 ، 0]]
=> {"a": 0، "b": null}، {"a": 0، "b": 1}، {"a": 2، "b": 1}

تعريف وظائف
يمكنك تسمية مرشح باستخدام بناء جملة "def":

زيادة مواطنه:. + 1 ؛

منذ ذلك الحين ، زيادة يمكن استخدامه كمرشح تمامًا مثل الوظيفة المضمنة (في الواقع ، هذا
هي كيفية تعريف بعض المباني). قد تأخذ الوظيفة الحجج:

خريطة def (و): [. [] | F]؛

يتم تمرير الوسيطات كمرشحات وليس كقيم. يمكن الرجوع إلى نفس الحجة
عدة مرات بمدخلات مختلفة (هنا f يتم تشغيله لكل عنصر من عناصر مصفوفة الإدخال).
تعمل وسيطات الدالة مثل عمليات الاسترجاعات أكثر من وسيطات القيمة. هذا هو
من المهم أن نفهم. انصح:

def foo (f): f | f ؛
5 | فو (. * 2)

ستكون النتيجة 20 لأن f is . * 2، وأثناء الاحتجاج الأول f . سيكون 5 ،
والمرة الثانية ستكون 10 (5 * 2) ، وبالتالي ستكون النتيجة 20. وسيطات دالة
هي عوامل تصفية ، وتتوقع المرشحات إدخالاً عند استدعائها.

إذا كنت تريد سلوك وسيطة القيمة لتعريف وظائف بسيطة ، فيمكنك فقط استخدام ملف
المتغير:

def addvalue (f): f كـ $ f | الخريطة (. + $ f) ؛

أو استخدم اليد القصيرة:

def addvalue ($ f): ... ؛

مع أي من التعريفين ، addvalue (.foo) سيضيف المدخلات الحالية .foo لكل مجال
عنصر من المصفوفة.

يُسمح بتعريفات متعددة تستخدم نفس اسم الوظيفة. كل إعادة تعريف يحل محل
السابق لنفس العدد من وسيطات الدالة ، ولكن فقط للمراجع من
الوظائف (أو البرنامج الرئيسي) بعد إعادة التعريف.

jq ´def addvalue (f):. + [و] ؛ الخريطة (addvalue (. [0])) ´
[[1,2،10,20] ، [XNUMX،XNUMX]]
=> [[1,2,1،10,20,10،XNUMX]، [XNUMX،XNUMX،XNUMX]]

jq ´def addvalue (f): f مثل $ x | الخريطة (. + $ x) ؛ addvalue (. [0]) ´
[[1,2،10,20] ، [XNUMX،XNUMX]]
=> [[1,2,1,2،10,20,1,2،XNUMX]، [XNUMX،XNUMX،XNUMX]]

تخفيض
تخفيض يسمح بناء الجملة في jq بدمج جميع نتائج التعبير بواسطة
تجميعها في إجابة واحدة. كمثال ، سوف نمر [3,2,1] لهذا
التعبير:

تقليل. [] كعنصر $ (0؛. + $ item)

لكل نتيجة . [] ينتج عنه، . + عنصر $ يتم تشغيله لتجميع الإجمالي الحالي ،
بدءًا من 0. في هذا المثال ، . [] ينتج النتائج 3 و 2 و 1 ، وبالتالي يكون التأثير
يشبه تشغيل شيء مثل هذا:

0 | (3 كعنصر $ |. + $ item) |
(2 كعنصر $ |. + $ item) |
(1 كعنصر $ |. + $ item)

jq ´ تقليل. [] كعنصر $ (0؛. + $ item) ´
[10,2,5,3]
=> 20

حد (ن ؛ إكسب)
قصر مقتطفات وظيفة تصل إلى n مخرجات من إكسب.

jq ´ [limit (3؛. [])]
[0,1,2,3,4,5,6,7,8,9]
=> [0,1,2،XNUMX،XNUMX،XNUMX]

الأول (expr) ، الماضي (expr) ، ن (ن ؛ اكسبر)
الأول (expr) و الماضي (expr) تستخرج الدالات القيم الأولى والأخيرة من على سبيل المثال,
على التوالي.

ن (ن ؛ اكسبر) تستخرج الدالة ناتج القيمة n بواسطة على سبيل المثال. يمكن تعريف هذا على أنه
صفر ن (ن ؛ اكسبر): آخر (حد (n + 1; expr)) ؛. لاحظ أن ن (ن ؛ اكسبر) لا يدعم
القيم السلبية لـ n.

jq ´ [الأول (النطاق (.)) ، الأخير (النطاق (.)) ، العدد (. / 2 ؛ النطاق (.))] ´
10
=> [0,9,5،XNUMX،XNUMX،XNUMX]

أولاً, الاخير، ن (ن)
أول و آخر تستخرج الدوال القيم الأولى والأخيرة من أي مصفوفة في ..

ن (ن) تستخرج الدالة القيمة n لأي مصفوفة في ..

jq ´ [النطاق (.)] | [الأول ، الأخير ، نطة(5)] ´
10
=> [0,9,5،XNUMX،XNUMX،XNUMX]

foreach
foreach بناء الجملة مشابه لـ تخفيض، ولكنها تهدف إلى السماح ببناء قصر
والمخفضات التي تنتج نتائج وسيطة (انظر المثال).

النموذج foreach EXP as فار دولار (فيه؛ تحديث؛ مقتطف). مثل تخفيض, INIT مقيم
مرة واحدة لإنتاج قيمة حالة ، ثم كل ناتج من EXP لا بد أن فار دولار, قم is
تقييم لكل ناتج من EXP مع الوضع الحالي ومع فار دولار مرئي. كل قيمة
الإخراج بواسطة قم يستبدل الحالة السابقة. أخيرا، استخراج يتم تقييم لكل جديد
الدولة لاستخراج ناتج foreach.

هذا مفيد في الغالب فقط للبناء تخفيض- و قصر-مثل الوظائف. و لكنها
أكثر عمومية ، حيث يسمح بتخفيضات جزئية (انظر المثال أدناه).

jq ´ [foreach. [] كعنصر $ ([[]، []]؛ if $ item == null ثم [[]،. [0]] else [(. [0] + [$ item])، [ ]] end؛ if $ item == null ثم. [1] else blank end)] ´
[1,2,3,4 ، XNUMX ، XNUMX ، XNUMX ، فارغ ، "أ" ، "ب" ، فارغ]
=> [[1,2,3,4،XNUMX،XNUMX،XNUMX]، ["أ"، "ب"]]

العودية
كما هو موضح أعلاه، يعيد تنفيذ يستخدم العودية ، وأي دالة jq يمكن أن تكون عودية. ال
في حين يتم تنفيذ buildin أيضًا من حيث العودية.

يتم تحسين مكالمات الذيل كلما كان التعبير على يسار مخرجات المكالمة العودية
قيمته الأخيرة. في الممارسة العملية ، هذا يعني أن التعبير على يسار العودية
يجب ألا ينتج عن الاستدعاء أكثر من ناتج واحد لكل إدخال.

فمثلا:

def recurse (f): def r:.، (f | select (.! = null) | r) ؛ ص ؛

def while (cond ؛ تحديث):
def _ في حين:
إذا كان الشرط إذن. ، (تحديث | _ في الوقت نفسه) وإلا نهاية فارغة ؛
_في حين؛

تكرار def (exp):
def _ تكرار:
exp ، _كرر ؛
_كرر؛

مولدات كهرباء و التكرارات
بعض مشغلي ووظائف jq هي في الواقع مولدات من حيث أنها يمكن أن تنتج صفرًا ،
قيمة واحدة أو أكثر لكل إدخال ، تمامًا كما قد يتوقع المرء في البرمجة الأخرى
اللغات التي لديها مولدات. على سبيل المثال، . [] يولد جميع القيم في مدخلاته
(والتي يجب أن تكون مصفوفة أو كائنًا) ، نطاق (0؛ 10) يولد الأعداد الصحيحة بين 0 و
10 ، وهلم جرا.

حتى عامل الفاصلة هو مولد ، يولد أولاً القيم التي تم إنشاؤها بواسطة
التعبير الموجود على يسار الفاصلة ، ثم لكل من هؤلاء ، يتم إنشاء القيم بواسطة
التعبير على يمين الفاصلة.

فارغ المدمج هو المولد الذي ينتج صفر مخرجات. ال فارغ المضمن
يتراجع إلى تعبير المولد السابق.

يمكن أن تكون جميع وظائف jq مولدات فقط باستخدام مولدات مدمجة. من الممكن أيضا
لتحديد مولدات جديدة باستخدام العودية وعامل الفاصلة فقط. إذا كان الملف العودي
تكون المكالمة (المكالمات) "في وضع الذيل" ثم يكون المولد فعالاً. في المثال
أسفل المكالمة المتكررة بواسطة _نطاق لنفسها في وضع الذيل. يظهر المثال
ثلاثة مواضيع متقدمة: التكرار الذيل ، وبناء المولد ، والوظائف الفرعية.

jq ´def range (init؛ upto؛ by): def _range: if (by> 0 and. <upto) أو (by <0 and.> upto) ثم. نهاية؛ إذا كانت بواسطة == 0 ثم init else init | _range end | حدد ((بنسبة> 0 و. <حتى) أو (بنسبة <0 و.> تصل)) ؛ النطاق (0 ؛ 10 ؛ 3) ´
فارغة
=> 0، 3، 6، 9

jq ´def while (cond؛ update): def _ while: if cond then.، (update | _ while) else blank end؛ _في حين؛ [while (. <100؛. * 2)] ´
1
=> [1,2,4,8,16,32,64،XNUMX،XNUMX،XNUMX]

MATH


jq لديه دعم رقم الفاصلة العائمة فقط IEEE754 مزدوج الدقة (64 بت).

إلى جانب العمليات الحسابية البسيطة مثل +، jq لديه أيضًا معظم وظائف الرياضيات القياسية
من مكتبة C الرياضيات. وظائف C الرياضية التي تأخذ وسيطة إدخال واحدة (على سبيل المثال ، الخطيئة ())
متوفرة كدوال jq ذات وسيطة صفرية. وظائف C الرياضية التي تأخذ مدخلين
الحجج (على سبيل المثال ، الأسرى ()) متاحة كدوال jq ذات وسيطين تتجاهلها ..

يعتمد توافر وظائف الرياضيات القياسية على توافر المقابل
وظائف الرياضيات في نظام التشغيل ومكتبة الرياضيات. وظائف الرياضيات غير متوفرة
سيتم تعريفه ولكنه سيرفع خطأ.

I / O


في هذا الوقت ، يتمتع jq بحد أدنى من الدعم للإدخال / الإخراج ، غالبًا في شكل تحكم في الوقت المناسب
تتم قراءة المدخلات. يتم توفير وظيفتين مضمنتين لهذا ، إدخال و المدخلات، التي تقرأ
من نفس المصادر (على سبيل المثال ، ستدين، الملفات المسماة في سطر الأوامر) مثل jq نفسها. هؤلاء
يمكن تشذير بنيتين وأفعال القراءة الخاصة بـ jq مع بعضها البعض.

مدمج واحد يوفر الحد الأدنى من إمكانات الإخراج ، تصحيح. (تذكر أن برنامج jq´s
يتم دائمًا إخراج قيم الإخراج كنصوص JSON المعياري.) ال تصحيح يمكن أن يكون مدمج
السلوك الخاص بالتطبيق ، مثل الملفات التنفيذية التي تستخدم libjq C API ولكنها ليست كذلك
الملف القابل للتنفيذ jq نفسه.

إدخال
يُخرج مُدخلاً واحدًا جديدًا.

المدخلات
إخراج جميع المدخلات المتبقية ، واحدًا تلو الآخر.

هذا مفيد في المقام الأول للتخفيضات على مدخلات البرنامج.

تصحيح
يتسبب في ظهور رسالة تصحيح أخطاء بناءً على قيمة الإدخال. يلف ملف JQ القابل للتنفيذ
قيمة الإدخال مع ["تصحيح:" ، ] ويطبع ذلك وسطرًا جديدًا على stderr ،
بشكل مضغوط. هذا قد يتغير في المستقبل.

input_filename
يُرجع اسم الملف الذي تتم تصفية مدخلاته حاليًا. لاحظ أن هذه الإرادة
لا تعمل بشكل جيد ما لم يتم تشغيل jq في لغة UTF-8.

المدخلات_الخط_العدد
يُرجع رقم سطر الإدخال الجاري تصفيته حاليًا.

تدفق


مع --مجرى الخيار jq يمكنه تحليل نصوص الإدخال بطريقة متدفقة ، مما يسمح لـ jq
برامج لبدء معالجة نصوص JSON الكبيرة على الفور بدلاً من بعد التحليل
يكمل. إذا كان لديك نص JSON واحد بحجم 1 غيغابايت ، فسيسمح لك دفقه
لمعالجتها بسرعة أكبر.

ومع ذلك ، فإن البث ليس بالأمر السهل كما هو الحال مع برنامج jq [ و
] (وبعض الأشكال الأخرى) كمدخلات.

يتم توفير العديد من المكونات المدمجة لتسهيل التعامل مع التدفقات.

تستخدم الأمثلة أدناه الشكل المتدفق من [0،1 ، [XNUMX،XNUMX،XNUMX]]، والذي هو
[[0],0],[[1,0],1],[[1,0]],[[1]].

تتضمن أشكال التدفق [ و ] (للإشارة إلى أي قيمة عددية ، صفيف فارغ ،
أو كائن فارغ) ، و [ ] (للإشارة إلى نهاية مصفوفة أو كائن). مستقبل
إصدارات jq مع تشغيل --مجرى و -seq قد ينتج أشكال إضافية مثل ["خطأ
رسالة"] عندما يفشل نص الإدخال في التحليل.

truncate_stream (stream_expression)
تستهلك رقمًا كمدخلات وتقوم باقتطاع العدد المقابل لعناصر المسار من
على يسار نواتج التعبير المتدفق المحدد.

jq ´[1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]´
1
=> [[0]، 2]، [[0]]]

fromstream (stream_expression)
قيم المخرجات المقابلة لمخرجات تعبير الدفق.

jq ´fromstream(1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]]))´
فارغة
=> [2،XNUMX،XNUMX،XNUMX]

تيار
تيار مخرجات مدمجة الشكل المتدفق لمدخلاتها.

جي ق ´. كـ $ dot | fromstream ($ dot | tostream) |. == $ dot´
[0 ، [1 ، {"أ": 1} ، {"ب": 2}]]
=> صحيح

مهمة


يعمل الواجب بشكل مختلف قليلاً في jq عن معظم لغات البرمجة. JQ لا
يميز بين الإشارات إلى شيء ما ونسخه - كائنان أو مصفوفتان
إما أن تكون متساوية أو غير متساوية ، دون أي فكرة أخرى عن كونها "نفس الشيء" أو "لا
نفس الشيء ".

إذا كان الكائن يحتوي على حقلين عبارة عن مصفوفات ، .foo و .شريط، وتقوم بإلحاق شيء ما به
.foo، ثم .شريط لن تكبر. حتى لو كنت قد ضبطت للتو .شريط = .foo. إذا كنت تستخدم
للبرمجة بلغات مثل Python و Java و Ruby و Javascript وما إلى ذلك ، ثم يمكنك التفكير
منه كما لو أن jq يقوم بنسخة عميقة كاملة من كل كائن قبل أن يقوم بالمهمة
(بالنسبة للأداء ، فإنه لا يفعل ذلك في الواقع ، لكن هذه هي الفكرة العامة).

جميع عوامل التخصيص في jq لها تعبيرات مسار على الجانب الأيسر.

=
مرشح .foo = 1 سوف يأخذ كإدخال كائن وينتج كإخراج كائن بامتداد
تم تعيين الحقل "foo" على 1. لا توجد فكرة عن "تعديل" أو "تغيير" شيء ما في jq -
جميع قيم jq غير قابلة للتغيير. على سبيل المثال،

.foo = .bar | .فو.باز = 1

لن يكون له التأثير الجانبي لإعداد .bar.baz ليتم تعيينه على 1 ، مثل نفس المظهر
برنامج في Javascript أو Python أو Ruby أو لغات أخرى. على عكس هذه اللغات (لكن
مثل Haskell وبعض اللغات الوظيفية الأخرى) ، لا يوجد مفهوم لمصفوفتين أو
كائنات هي "نفس المجموعة" أو "نفس الكائن". يمكن أن تكون متساوية ، أو غير متساوية ، لكن
إذا غيرنا أحدهما تحت أي ظرف من الظروف فلن يتغير الآخر وراء ظهورنا.

هذا يعني أنه من المستحيل بناء قيم دائرية في jq (مثل المصفوفة التي
العنصر الأول هو نفسه). هذا متعمد تمامًا ، ويضمن أن أي شيء jq
يمكن تمثيل البرنامج في JSON.

لاحظ أن الجانب الأيسر من ´ = ´ يشير إلى قيمة في .. وهكذا var.foo دولار = 1 لن يعمل
كما هو متوقع (var.foo دولار ليس تعبير مسار صالحًا أو مفيدًا في .) ؛ استعمال فار دولار | .foo = 1
بدلا من ذلك.

إذا كان الجانب الأيمن من ´ = ´ ينتج قيمًا متعددة ، فسيكون لكل قيمة من هذه القيمة jq
اضبط المسارات الموجودة على الجانب الأيسر على القيمة ثم ستخرج المعدل ..
على سبيل المثال، (.a، .b) =نطاق2 النتائج {"أ": 0 ، "ب": 0}، ثم {"أ": 1 ، "ب": 1}. التحديث"
نماذج التخصيص (انظر أدناه) لا تفعل هذا.

لاحظ أيضًا ذلك .a، .b = 0 لا يحدد .a و .b، لكن (.a، .b) = 0 يضع كلاهما.

|=
بالإضافة إلى عامل التعيين ´ = ´ ، يوفر jq عامل التشغيل "التحديث" ´ | = ´ ، والذي
يأخذ مرشحًا على الجانب الأيمن ويحدد القيمة الجديدة لممتلكات .
يتم التعيين إليه من خلال تشغيل القيمة القديمة من خلال هذا التعبير. على سبيل المثال ، .foo | =
. + 1 سيُنشئ كائنًا مع تعيين الحقل "foo" على الإدخال "foo" زائد 1.

يجب أن يوضح هذا المثال الفرق بين ´ = ´ و ´ | = ´:

قم بتوفير الإدخال ´ {"a": {"b": 10}، "b": 20} ´ للبرامج:

.a = .b .a | = .b

الأول سيحدد الحقل "a" للإدخال إلى الحقل "b" للإدخال ، وينتج
الإخراج {"أ": 20}. الأخير سيحدد الحقل "a" للإدخال إلى الحقل "a"
الحقل "ب" ، ينتج {"أ": 10}.

يمكن أن يكون الجانب الأيسر أي تعبير عام للمسار ؛ ارى طريق().

لاحظ أن الجانب الأيسر من ´ | = يشير إلى قيمة في .. وهكذا var.foo دولار |= . + 1 متعود
العمل كما هو متوقع (var.foo دولار ليس تعبير مسار صالحًا أو مفيدًا في .) ؛ استعمال فار دولار | .foo
|= . + 1 بدلا من ذلك.

إذا كان الجانب الأيمن ينتج قيمًا متعددة ، فسيتم استخدام القيمة الأخيرة فقط.

jq ´ (.. | حدد (اكتب == "منطقي")) | = إذا. ثم 1 آخر 0 end´
[صواب ، خطأ ، [5 ، صواب ، [صواب ، [خطأ]] ، خطأ]]
=> [1,0,[5,1,[1,[0]],0]]

+ = ، - = ، * = ، / = ، ٪ = ، // =
لدى jq عدد قليل من عوامل التشغيل في النموذج a المرجع = b، والتي تعادل جميعها a |= . op b. وبالتالي،
+= 1 يمكن استخدامها لزيادة القيم.

jq ´.foo + = 1´
{"فو": 42}
=> {"foo": 43}

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

.posts [0] .title = "JQ Manual"

ما قد يكون مفاجئًا هو أن التعبير الموجود على اليسار قد ينتج عنه مضاعفات
النتائج ، بالإشارة إلى نقاط مختلفة في مستند الإدخال:

المشاركات []. التعليقات | =. + ["هذا رائع"]

يُلحق هذا المثال السلسلة "هذا رائع" بمصفوفة "التعليقات" لكل مشاركة في
الإدخال (حيث يكون الإدخال كائنًا به حقل "مشاركات" وهو عبارة عن مجموعة من المشاركات).

عندما يواجه jq مهمة مثل ´a = b´ ، فإنه يسجل "المسار" المأخوذ لتحديد ملف
جزء من مستند الإدخال أثناء تنفيذ ملف. ثم يتم استخدام هذا المسار للعثور على أي جزء من
الإدخال المطلوب تغييره أثناء تنفيذ المهمة. يمكن استخدام أي مرشح على
الجانب الأيسر من يساوي - أيًا كانت المسارات التي تختارها من الإدخال ستكون حيث
يتم تنفيذ المهمة.

هذه عملية قوية للغاية. لنفترض أننا أردنا إضافة تعليق على منشورات المدونة باستخدام
نفس مدخلات "المدونة" أعلاه. هذه المرة ، نريد فقط التعليق على المشاركات التي كتبها
"ستيدولان". يمكننا العثور على هذه المنشورات باستخدام وظيفة "تحديد" الموضحة سابقًا:

.posts [] | حدد (.author == "ستيدولان")

تشير المسارات التي توفرها هذه العملية إلى كل من المشاركات التي كتبها "ستيدولان" ، و
يمكننا التعليق على كل منهم بنفس الطريقة التي فعلناها من قبل:

(.posts [] | حدد (.author == "stedolan") | .comments) | =
. + ["رهيب."]

MODULES


jq لديه مكتبة / نظام وحدة. الوحدات النمطية هي ملفات تنتهي أسماؤها بـ .جق.

يتم البحث عن الوحدات التي يستوردها البرنامج في مسار البحث الافتراضي (انظر أدناه). ال
استيراد و تتضمن تسمح التوجيهات للمستورد بتعديل هذا المسار.

تخضع المسارات في مسار البحث لبدائل مختلفة.

بالنسبة للمسارات التي تبدأ بـ "~ /" ، يتم استبدال الدليل الرئيسي للمستخدم بـ "~".

بالنسبة للمسارات التي تبدأ بـ "$ ORIGIN /" ، يتم استبدال مسار ملف jq القابل للتنفيذ
"أصل $".

بالنسبة للمسارات التي تبدأ بـ ". /" أو المسارات التي تكون "." ، يكون مسار ملف التضمين هو
استبدال ".". بالنسبة لبرامج المستوى الأعلى الواردة في سطر الأوامر ، فإن الملف الحالي
الدليل مستخدم.

يمكن أن تحدد توجيهات الاستيراد بشكل اختياري مسار بحث يتم إلحاق الافتراضي به.

مسار البحث الافتراضي هو مسار البحث المعطى لملف -L خيار سطر الأوامر ، وإلا
["~ / .jq", "ORIGIN $ /../ lib / jq" ، "ORIGIN $ / ../ ليب"].

تنهي عناصر مسار السلسلة الفارغة والفارغة معالجة مسار البحث.

سيتم البحث عن التبعية ذات المسار النسبي "foo / bar" في "foo / bar.jq" و
"foo / bar / bar.jq" في مسار البحث المحدد. يهدف هذا إلى السماح للوحدات النمطية ليتم وضعها
في دليل مع ، على سبيل المثال ، ملفات التحكم في الإصدار وملفات README وما إلى ذلك ،
ولكن أيضًا للسماح بوحدات الملف الفردي.

لا يُسمح للمكونات المتتالية التي تحمل الاسم نفسه لتجنب الغموض (على سبيل المثال ،
"فو فو").

على سبيل المثال ، مع -L $ الصفحة الرئيسية / .jq وحدة فو يمكن العثور عليها في $ HOME / .jq / foo.jq و
$ HOME / .jq / foo / foo.jq.

إذا كان "$ HOME / .jq" ملفًا ، فسيتم إدخاله في البرنامج الرئيسي.

استيراد RelativePathString as اسم [ ] ؛
يستورد وحدة موجودة في المسار المحدد بالنسبة إلى دليل في مسار البحث. أ ".jq"
ستتم إضافة اللاحقة إلى سلسلة المسار النسبي. رموز الوحدة مسبوقة بـ
"اسم::".

يجب أن تكون البيانات الوصفية الاختيارية عبارة عن تعبير jq ثابت. يجب أن يكون كائنًا به مفاتيح
مثل "الصفحة الرئيسية" وما إلى ذلك. في هذا الوقت ، يستخدم jq فقط مفتاح / قيمة "بحث"
البيانات الوصفية. يتم أيضًا توفير البيانات الوصفية للمستخدمين عبر ملف com.modulemeta مدمج.

يجب أن يحتوي مفتاح "البحث" في البيانات الوصفية ، إن وجد ، على سلسلة أو قيمة مصفوفة (مصفوفة
من السلاسل) ؛ هذا هو مسار البحث الذي يجب أن يكون مسبوقًا بمسار بحث المستوى الأعلى.

تتضمن RelativePathString [ ] ؛
يستورد وحدة موجودة في المسار المحدد بالنسبة إلى دليل في مسار البحث كما لو كان
تم تضمينها في المكان. ستتم إضافة لاحقة ".jq" إلى سلسلة المسار النسبية. ال
يتم استيراد رموز الوحدة إلى مساحة اسم المتصل كما لو كان محتوى الوحدة يحتوي على
تم تضمينها مباشرة.

يجب أن تكون البيانات الوصفية الاختيارية عبارة عن تعبير jq ثابت. يجب أن يكون كائنًا به مفاتيح
مثل "الصفحة الرئيسية" وما إلى ذلك. في هذا الوقت ، يستخدم jq فقط مفتاح / قيمة "بحث"
البيانات الوصفية. يتم أيضًا توفير البيانات الوصفية للمستخدمين عبر ملف com.modulemeta مدمج.

استيراد RelativePathString as اسم $ [ ] ؛
يستورد ملف JSON الذي تم العثور عليه في المسار المحدد المتعلق بدليل في مسار البحث. أ
ستتم إضافة اللاحقة ".json" إلى سلسلة المسار ذات الصلة. ستكون بيانات الملف
متاح كـ $ NAME :: NAME.

يجب أن تكون البيانات الوصفية الاختيارية عبارة عن تعبير jq ثابت. يجب أن يكون كائنًا به مفاتيح
مثل "الصفحة الرئيسية" وما إلى ذلك. في هذا الوقت ، يستخدم jq فقط مفتاح / قيمة "بحث"
البيانات الوصفية. يتم أيضًا توفير البيانات الوصفية للمستخدمين عبر ملف com.modulemeta مدمج.

يجب أن يحتوي مفتاح "البحث" في البيانات الوصفية ، إن وجد ، على سلسلة أو قيمة مصفوفة (مصفوفة
من السلاسل) ؛ هذا هو مسار البحث الذي يجب أن يكون مسبوقًا بمسار بحث المستوى الأعلى.

وحدة ؛
هذا التوجيه اختياري تمامًا. انها ليست مطلوبة للتشغيل السليم. التي تخدمها
فقط لغرض توفير البيانات الوصفية التي يمكن قراءتها باستخدام com.modulemeta مدمج.

يجب أن تكون البيانات الوصفية عبارة عن تعبير jq ثابت. يجب أن يكون كائنًا به مفاتيح مثل
"الصفحة الرئيسية". في هذا الوقت ، لا تستخدم jq هذه البيانات الوصفية ، لكنها متاحة للمستخدمين
عبر com.modulemeta مدمج.

com.modulemeta
يأخذ اسم الوحدة كمدخلات ويخرج البيانات الوصفية للوحدة ككائن ، بامتداد
وحدة الواردات (بما في ذلك البيانات الوصفية) كقيمة مصفوفة لمفتاح "deps".

يمكن للبرامج استخدام هذا للاستعلام عن البيانات الوصفية للوحدة ، والتي يمكن استخدامها بعد ذلك في
على سبيل المثال ، ابحث عن التبعيات المفقودة وقم بتنزيلها وتثبيتها.

استخدم jQ عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    Zabbix
    Zabbix
    Zabbix هو مفتوح من فئة المؤسسات
    حل المراقبة الموزعة المصدر
    مصممة للرصد والتتبع
    الأداء وتوافر الشبكة
    الخوادم والجهاز ...
    تحميل Zabbix
  • 2
    KDiff3
    KDiff3
    لم يعد هذا المستودع محفوظًا
    ويتم الاحتفاظ بها لأغراض الأرشفة. نرى
    https://invent.kde.org/sdk/kdiff3 for
    أحدث كود و
    https://download.kde.o...
    تنزيل KDiff3
  • 3
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX هو واجهة مستخدم رسومية لـ
    محمل USB من Waninkoko ، استنادًا إلى
    libwiigui. يسمح بإدراج و
    إطلاق ألعاب Wii وألعاب Gamecube و
    البيرة على Wii و WiiU ...
    قم بتنزيل USBLoaderGX
  • 4
    فايربيرد
    فايربيرد
    يوفر Firebird RDBMS ميزات ANSI SQL
    & يعمل على Linux و Windows و
    العديد من منصات Unix. سمات
    التزامن الممتاز والأداء
    & قوة...
    تنزيل Firebird
  • 5
    KompoZer و
    KompoZer و
    KompoZer هو محرر wysiwyg HTML يستخدم
    قاعدة كود Mozilla Composer. مثل
    تم إيقاف تطوير Nvu
    في عام 2005 ، قام KompoZer بإصلاح العديد من الأخطاء و
    يضيف و ...
    تنزيل KompoZer
  • 6
    تنزيل مانغا مجاني
    تنزيل مانغا مجاني
    برنامج Free Manga Downloader (FMD) هو ملف
    تطبيق مفتوح المصدر مكتوب بلغة
    Object-Pascal لإدارة و
    تحميل المانجا من مختلف المواقع.
    هذا هو المرآة ...
    تنزيل Free Manga Downloader
  • أكثر "

أوامر لينكس

Ad