يعرّف JSON المصفوفة بأنها:
المصفوفة مجموعة مرتّبة من القيم. تبدأ المصفوفة بقوس مربع أيسر
[وتنتهي بقوس مربع أيمن]. وتُفصل القيم بفاصلة,.
يمكن أن تحتوي المصفوفة على صفر أو أكثر من أي نوع من قيم JSON. ولا يلزم أن تكون عناصر المصفوفة جميعها من النوع نفسه.
استخدم الأقواس لتجميع العناصر في مصفوفة.
[1, 2, 3]
يمكن التقاط عناصر تيار في مصفوفة عبر إحاطته بالأقواس.
range(5) # => a stream of 5 numbers
[range(5)] # => the array [0, 1, 2, 3, 4]
تُرجع الدالة length عدد العناصر في المصفوفة.
تبدأ فهرسة المصفوفة من الصفر.
استرجع عنصرًا من المصفوفة باستخدام تعبير أقواس:
.[2] يجلب العنصر الثالث.
تُعد الفهارس السالبة من نهاية المصفوفة إلى الخلف:
.[-1] يجلب العنصر الأخير، و.[-2] هو العنصر قبل الأخير.
المقطع هو تتابع فرعي من عناصر المصفوفة.
يُرجع .[10:15] 5 عناصر بدءًا من الفهرس 10، ولا يتضمن فهرس النهاية.
وهناك بعض الدوال المساعدة:
first يجلب العنصر الأول.last يجلب العنصر الأخير.nth(n) يجلب العنصر عند الفهرس n.يوفر jq العديد من الدوال لتغطية وظائف التكرار الشائعة:
تُرجع map(expr) مصفوفة جديدة يُطبَّق فيها expr على كل عنصر بدوره.
[1, 2, 3] | map(. * 10) # => [10, 20, 30]
select(expr) دالة تُطبِّق expr على قيمة واحدة؛
فإذا كانت نتيجة التعبير صحيح، تُرجع القيمة؛
وإذا كانت النتيجة خطأ، فلا تُرجع شيئًا، وليس null، بل لا شيء فعلًا.
ولتطبيق ذلك على مصفوفة، اجمعه مع map.
[range(10)] | map(select(. % 2 == 0)) # => [0, 2, 4, 6, 8]
أو بدلًا من ذلك، طبّق select على تيار واجمع النتائج.
[range(10) | select(. % 2 == 0)] # => [0, 2, 4, 6, 8]
تُرجع any(condition) وall(condition) قيمة منطقية تحدد ما إذا كان أي من عناصر المصفوفة أو كلها يحقق الشرط.
[1, 2, 3, 4] | any(. > 4) # false
[1, 2, 3, 4] | any(. >= 4) # true
[1, 2, 3, 4] | all(. >= 4) # false
[1, 2, 3, 4] | all(. <= 4) # true
أنت مراقب طيور شغوف يتابع عدد الطيور التي زارت حديقتك خلال الأيام السبعة الأخيرة.
لديك خمس مهام، وكلها تتعلق بأعداد الطيور التي زارت حديقتك.
أنت تخزّن أعداد الطيور بصيغة JSON. تخزّن مصفوفة «رئيسية» مصفوفات الأعداد الأسبوعية. كل عدد أسبوعي عبارة عن مصفوفة من سبعة أعداد صحيحة، عدد واحد لكل يوم من أيام الأسبوع. وأنت تضيف دائمًا الأسابيع الجديدة في نهاية المصفوفة الرئيسية. نفّذ المرشّح الذي يُرجع أعداد الأسبوع الماضي.
$ cat bird-counting-data.json
[
...,
[0, 2, 5, 3, 7, 8, 4],
[4, 5, 9, 10, 9, 4, 3]
]
$ jq -f bird-count.jq < bird-counting-data.json
{
"last_week": [0, 2, 5, 3, 7, 8, 4],
...
نفّذ المرشّح لِيُرجع عدد الطيور التي زارت حديقتك أمس. تُرتَّب أعداد الطيور حسب اليوم، إذ يكون العنصر الأول عدد أقدم يوم، والعنصر الأخير عدد اليوم الحالي.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"yesterday": 4,
...
نفّذ المرشّح لِيُرجع العدد الإجمالي للطيور التي زارت حديقتك هذا الأسبوع.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"total": 44,
...
بعض الأيام أكثر ازدحامًا من غيرها. اليوم المزدحم هو اليوم الذي زارت فيه خمسة طيور أو أكثر حديقتك. نفّذ المرشّح لِيُرجع عدد الأيام المزدحمة هذا الأسبوع.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"busy_days": 4,
...
نفّذ المرشّح الذي يُرجع true إذا كان في هذا الأسبوع يوم لم تزر فيه أي طيور حديقتك، وإلا فأرجع false.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"has_day_without_birds": false
}
سجّل في Exercism لتتعلّم وتتقن jq عبر 12 مفهومًا75 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.