← العودة إلى المدونة

أداة البحث في مسارات JSON

تعلم كيفية استخدام JSONPath للبحث والاستعلام عن البيانات في JSON. دليل شامل مع أمثلة.

Big JSON Team14 دقيقة للقراءةadvanced
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

14 دقيقة قراءة

# أداة البحث في مسارات JSON

JSONPath هي لغة استعلام قوية للبحث والاستخراج من مستندات JSON.

ما هو JSONPath؟

التعريف

JSONPath هي لغة استعلام لـ JSON، مشابهة لـ XPath لـ XML.

الاستخدامات

  • البحث - العثور على قيم محددة
  • الاستخراج - استخراج بيانات معينة
  • التصفية - تصفية البيانات
  • التنقل - التنقل في البنية

البنية الأساسية

العنصر الجذر ($)

// البيانات

{

"الاسم": "أحمد",

"العمر": 30

}

// المسار: $

// النتيجة: كل الكائن

الكائن الحالي (@)

يستخدم في التعبيرات الشرطية.

نقطة الوصول (.)

// البيانات

{

"المستخدم": {

"الاسم": "أحمد"

}

}

// المسار: $.المستخدم.الاسم

// النتيجة: "أحمد"

الفهرس []

// البيانات

{

"المستخدمون": ["أحمد", "فاطمة", "محمد"]

}

// المسار: $.المستخدمون[0]

// النتيجة: "أحمد"

// المسار: $.المستخدمون[1]

// النتيجة: "فاطمة"

العمليات الأساسية

الوصول المباشر

const data = {

الشركة: {

الاسم: "شركة التقنية",

العنوان: {

المدينة: "الرياض",

الشارع: "شارع الملك فهد"

}

}

};

// $.الشركة.الاسم

// النتيجة: "شركة التقنية"

// $.الشركة.العنوان.المدينة

// النتيجة: "الرياض"

جميع العناصر ()

const data = {

المستخدمون: {

user1: { الاسم: "أحمد" },

user2: { الاسم: "فاطمة" }

}

};

// $.المستخدمون.

// النتيجة: [{ الاسم: "أحمد" }, { الاسم: "فاطمة" }]

// $.المستخدمون..الاسم

// النتيجة: ["أحمد", "فاطمة"]

البحث العميق (..)

const data = {

الشركة: {

القسم: {

الموظفون: [

{ الاسم: "أحمد" },

{ الاسم: "فاطمة" }

]

}

}

};

// $..الاسم

// النتيجة: ["أحمد", "فاطمة"]

العمل مع المصفوفات

فهرس واحد

const data = {

المنتجات: [

{ الاسم: "منتج 1", السعر: 100 },

{ الاسم: "منتج 2", السعر: 200 }

]

};

// $.المنتجات[0]

// النتيجة: { الاسم: "منتج 1", السعر: 100 }

// $.المنتجات[0].الاسم

// النتيجة: "منتج 1"

نطاق الفهارس

// $.المنتجات[0:2]

// النتيجة: أول منتجين

// $.المنتجات[1:]

// النتيجة: من الثاني حتى النهاية

// $.المنتجات[:2]

// النتيجة: أول منتجين

جميع عناصر المصفوفة

// $.المنتجات[]

// النتيجة: جميع المنتجات

// $.المنتجات[].الاسم

// النتيجة: ["منتج 1", "منتج 2"]

الفهرس السلبي

// $.المنتجات[-1]

// النتيجة: آخر منتج

// $.المنتجات[-2]

// النتيجة: المنتج قبل الأخير

التصفية

التعبيرات الشرطية

const data = {

المنتجات: [

{ الاسم: "منتج 1", السعر: 100 },

{ الاسم: "منتج 2", السعر: 200 },

{ الاسم: "منتج 3", السعر: 150 }

]

};

// $.المنتجات[?(@.السعر > 120)]

// النتيجة: المنتجات التي سعرها أكبر من 120

أمثلة تصفية

// السعر يساوي 100

$.المنتجات[?(@.السعر == 100)]

// السعر ليس 100

$.المنتجات[?(@.السعر != 100)]

// السعر أكبر من أو يساوي 150

$.المنتجات[?(@.السعر >= 150)]

// السعر أقل من 200

$.المنتجات[?(@.السعر < 200)]

تصفية بالنص

const data = {

المستخدمون: [

{ الاسم: "أحمد", المدينة: "الرياض" },

{ الاسم: "فاطمة", المدينة: "جدة" },

{ الاسم: "محمد", المدينة: "الرياض" }

]

};

// $.المستخدمون[?(@.المدينة == "الرياض")]

// النتيجة: المستخدمون في الرياض

استخدام JSONPath في JavaScript

مكتبة jsonpath

import jp from 'jsonpath';

const data = {

المتجر: {

الكتب: [

{

الفئة: "مرجع",

المؤلف: "نايجل ريس",

العنوان: "Sayings of the Century",

السعر: 8.95

},

{

الفئة: "خيال",

المؤلف: "إيفلين واو",

العنوان: "Sword of Honour",

السعر: 12.99

}

]

}

};

// جميع المؤلفين

const authors = jp.query(data, '$..المؤلف');

console.log(authors);

// ["نايجل ريس", "إيفلين واو"]

// الكتب الأرخص من 10

const cheap = jp.query(data, '$.المتجر.الكتب[?(@.السعر < 10)]');

console.log(cheap);

jsonpath-plus

import { JSONPath } from 'jsonpath-plus';

const data = {

المستخدمون: [

{ الاسم: "أحمد", العمر: 30 },

{ الاسم: "فاطمة", العمر: 25 }

]

};

// استخدام JSONPath

const result = JSONPath({

path: '$.المستخدمون[].الاسم',

json: data

});

console.log(result);

// ["أحمد", "فاطمة"]

أمثلة متقدمة

استعلام معقد

const data = {

الشركة: {

الأقسام: [

{

الاسم: "التطوير",

الموظفون: [

{ الاسم: "أحمد", الراتب: 10000 },

{ الاسم: "فاطمة", الراتب: 12000 }

]

},

{

الاسم: "التسويق",

الموظفون: [

{ الاسم: "محمد", الراتب: 9000 }

]

}

]

}

};

// جميع الموظفين

const allEmployees = jp.query(data, '$..الموظفون[]');

// الموظفون براتب أكثر من 10000

const highPaid = jp.query(data, '$..الموظفون[?(@.الراتب > 10000)]');

// أسماء الموظفون في التطوير

const devNames = jp.query(

data,

'$.الشركة.الأقسام[?(@.الاسم == "التطوير")].الموظفون[].الاسم'

);

تجميع النتائج

const data = {

الطلبات: [

{

id: 1,

العناصر: [

{ المنتج: "منتج 1", الكمية: 2 },

{ المنتج: "منتج 2", الكمية: 1 }

]

},

{

id: 2,

العناصر: [

{ المنتج: "منتج 1", الكمية: 3 }

]

}

]

};

// جميع المنتجات من جميع الطلبات

const allProducts = jp.query(data, '$..العناصر[].المنتج');

console.log(allProducts);

// ["منتج 1", "منتج 2", "منتج 1"]

JSONPath في Python

from jsonpath_ng import parse

data = {

"المستخدمون": [

{"الاسم": "أحمد", "العمر": 30},

{"الاسم": "فاطمة", "العمر": 25}

]

}

# تحليل المسار

jsonpath_expr = parse('$.المستخدمون[].الاسم')

# البحث

matches = [match.value for match in jsonpath_expr.find(data)]

print(matches)

# ['أحمد', 'فاطمة']

أدوات JSONPath عبر الإنترنت

1. JSONPath Online Evaluator

1. افتح jsonpath.com
  • الصق JSON الخاص بك
  • أدخل تعبير JSONPath
  • شاهد النتائج فوراً
  • 2. JSONPath Finder

    1. افتح jsonpathfinder.com
    
  • الصق البيانات
  • انقر على العنصر المطلوب
  • احصل على المسار تلقائياً
  • حالات استخدام عملية

    استخراج بيانات API

    // استجابة API
    

    const response = {

    status: "success",

    data: {

    users: [

    {

    id: 1,

    name: "أحمد",

    posts: [

    { id: 101, title: "منشور 1" },

    { id: 102, title: "منشور 2" }

    ]

    }

    ]

    }

    };

    // استخراج جميع عناوين المنشورات

    const titles = jp.query(response, '$..posts[].title');

    console.log(titles);

    معالجة ملفات التكوين

    const config = {
    

    database: {

    production: {

    host: "prod.db.com",

    port: 5432

    },

    development: {

    host: "dev.db.com",

    port: 5432

    }

    }

    };

    // الحصول على جميع المضيفين

    const hosts = jp.query(config, '$..host');

    console.log(hosts);

    // ["prod.db.com", "dev.db.com"]

    البحث في البيانات

    function searchInData(data, searchTerm) {
    

    // البحث في جميع قيم النص

    const results = jp.query(

    data,

    $..[?(@.match(/${searchTerm}/i))]

    );

    return results;

    }

    // الاستخدام

    const data = {

    المستخدمون: [

    { الاسم: "أحمد محمد" },

    { الاسم: "فاطمة أحمد" }

    ]

    };

    const results = searchInData(data, "أحمد");

    مقارنة JSONPath مع بدائل

    JSONPath vs Object Access

    const data = { user: { name: "أحمد" } };
    
    

    // Object Access

    const name1 = data.user.name;

    // JSONPath

    const name2 = jp.query(data, '$.user.name')[0];

    // JSONPath أكثر مرونة للاستعلامات المعقدة

    JSONPath vs lodash

    import _ from 'lodash';
    
    

    const data = {

    users: [

    { name: "أحمد", age: 30 },

    { name: "فاطمة", age: 25 }

    ]

    };

    // lodash

    const names1 = _.map(data.users, 'name');

    // JSONPath

    const names2 = jp.query(data, '$.users[].name');

    أفضل الممارسات

    1. ابدأ بسيط

    ابدأ بمسارات بسيطة واجعلها أكثر تعقيداً تدريجياً.

    2. استخدم الأدوات

    استخدم أدوات عبر الإنترنت لاختبار التعبيرات.

    3. احفظ المسارات الشائعة

    const PATHS = {
    

    ALL_USERS: '$.users[]',

    USER_NAMES: '$.users[].name',

    ACTIVE_USERS: '$.users[?(@.active == true)]'

    };

    const names = jp.query(data, PATHS.USER_NAMES);

    4. معالجة الأخطاء

    function safeQuery(data, path) {
    

    try {

    const result = jp.query(data, path);

    return result.length > 0 ? result : null;

    } catch (error) {

    console.error('خطأ في JSONPath:', error);

    return null;

    }

    }

    مرجع سريع

    $           - الجذر
    

    @ - العقدة الحالية

    . - طفل

    .. - بحث عميق

    * - جميع العناصر

    [] - فهرس/شرط

    [start:end] - نطاق

    ?() - تصفية

    الملخص

    JSONPath:

    • قوي ومرن
    • سهل التعلم
    • مدعوم جيداً
    • مفيد للبيانات المعقدة

    استخدم JSONPath للبحث الفعال في JSON!

    Share:

    مقالات ذات صلة

    Read in English