في هذا المقال سنتناول كيفية البحث في JSON متعدد الأبعاد باستخدام JavaScript للعثور على السلاسل المحددة واسترجاع جميع العقد التي تحتوي على تلك السلاسل. سنقوم بإنشاء وظيفة تقوم بالبحث في كل عقدة من عقد JSON وفي حال وجود السلسلة المحددة، ستضيف العقدة إلى مصفوفة تمثل النتائج المطلوبة. هيا نبدأ:
javascript// الدالة التي تقوم بالبحث في JSON متعدد الأبعاد
function searchInJson(json, searchString) {
let results = [];
// دالة التفتيش تبحث في كل عقدة
function search(node, path) {
// التأكد من أن العقدة ليست فارغة
if (node !== null && typeof node === 'object') {
// حلق عبر جميع عناصر العقدة
for (let key in node) {
if (node.hasOwnProperty(key)) {
let newPath = path + '.' + key;
let value = node[key];
// إذا كانت القيمة نصًا وتحتوي على السلسلة المحددة، قم بإضافة العقدة إلى النتائج
if (typeof value === 'string' && value.includes(searchString)) {
results.push({ path: newPath, value: value });
}
// إذا كانت القيمة عقدة، قم بالبحث فيها أيضًا
if (typeof value === 'object') {
search(value, newPath);
}
}
}
}
}
// بدء البحث من العقدة الجذرية
search(json, 'root');
return results;
}
// JSON متعدد الأبعاد للاختبار
let json = {
"name": "John",
"age": 30,
"cars": {
"car1": "Ford",
"car2": "BMW",
"car3": "Fiat"
}
};
// البحث عن السلسلة "Ford"
let searchString = "Ford";
let searchResults = searchInJson(json, searchString);
// طباعة النتائج
console.log("نتائج البحث عن السلسلة '" + searchString + "':");
searchResults.forEach(result => {
console.log(result.path + " - " + result.value);
});
يمكنك استبدال المتغير json
بالبيانات JSON الفعلية التي تحتاج إلى البحث فيها، ويمكنك تغيير السلسلة searchString
إلى السلسلة التي تبحث عنها. ستقوم الدالة searchInJson
بإرجاع مصفوفة تحتوي على جميع العقد التي تحتوي على السلسلة المحددة، بالإضافة إلى مسارات العقد الذي تم العثور عليه.
المزيد من المعلومات
بالتأكيد، هنا بعض المعلومات الإضافية حول كيفية عمل الكود:
-
البحث في العقدة الجذرية: يبدأ البحث من العقدة الجذرية في JSON ويتحرك عبر كل عقدة وفرع من العقدة الجذرية باستخدام دالة التفتيش
search
داخل الدالةsearchInJson
. -
التحقق من العقدة الفارغة: يتم التحقق من عدم فراغ العقدة قبل تحليل محتواها للتأكد من عدم حدوث أخطاء.
-
الحلق عبر العقدة: يتم استخدام حلقة
for...in
للحصول على جميع العناصر داخل العقدة، ويتم التحقق من خصائص العقدة باستخدامhasOwnProperty
لضمان عدم احتواء العقدة على خصائص موروثة. -
التحقق من نوع القيمة: يتم التحقق من نوع القيمة لكل عنصر في العقدة، وإذا كانت القيمة نصًا وتحتوي على السلسلة المحددة، فإن العقدة تُضاف إلى النتائج.
-
البحث في العقدات الفرعية: إذا كانت القيمة عبارة عن عقدة، يتم استدعاء الدالة
search
مرة أخرى للبحث في هذه العقدة الفرعية. -
تنسيق النتائج: يتم تنسيق النتائج في كائن يحتوي على مسار العقدة وقيمتها، ويتم طباعة هذه النتائج في نهاية الكود.
هذه الطريقة تعتمد على التفتيش العميق في العقد JSON، مما يتيح العثور على السلسلة المحددة في أي موضع داخل العقد، سواء كانت في العقدة الجذرية أو في عقدات فرعية.