أداة البحث في مسارات JSON
تعلم كيفية استخدام JSONPath للبحث والاستعلام عن البيانات في JSON. دليل شامل مع أمثلة.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# أداة البحث في مسارات 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!
مقالات ذات صلة
ما هو JSON؟ دليل شامل للمبتدئين
تعلم ما هو JSON، قواعد الصياغة، أنواع البيانات، وحالات الاستخدام. دليل شامل للمبتدئين لفهم JavaScript Object Notation وأهميته في تطوير البرمجيات الحديثة.
أفضل أدوات JSON عبر الإنترنت
اكتشف أفضل أدوات JSON المجانية عبر الإنترنت للتنسيق، التحقق، التحويل، والمقارنة.
بنيات JSON المتقدمة: دليل شامل
تعلم كيفية العمل مع بنيات JSON المعقدة، الأنماط، الأداء، وأفضل الممارسات.