كيفية تحليل JSON في لغة بايثون

هل تتساءل عن كيفية تحليل JSON في لغة Python؟ لست وحدك. هذا الدليل يجعل قراءة وكتابة وتحليل شفرة برمجية أمرًا... سهلاً للغاية.

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

ما هو التحليل النحوي؟

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

تحليل JSON من الصفر في لغة هاسكل | Abhinavsarkar.net

يُطلق على النوع الأكثر شيوعًا من المحللات اسم «المحلل اللفظي» (lexer)، وهو الذي يحول تسلسلات الأحرف إلى رموز (أو «وحدات لفظية»). ويمكن أن تكون الرمز أي شيء له معنى في لغتك: فقد يكون مُعرِّفًا، أو سلسلة نصية حرفية مثل «hello»، أو حتى شيئًا أكثر تعقيدًا مثل استدعاء دالة. 

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

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

ما هو JSON؟

تعد «ترميز كائنات جافا سكريبت» (JavaScript Object Notation) تنسيقًا خفيفًا لتبادل البيانات يصف الكائنات — عبر أزواج من السمات والقيم — لغرض تخزين البيانات أو نقلها. على سبيل المثال، لنفترض أن لديك مسردًا مصطلحات على موقعك الإلكتروني. يستخدم JSON سلسلة نصية لتعريفه. “title” : “example glossary”

ما هي الأنواع الرئيسية لملفات JSON؟

هناك نوعان رئيسيان من ملفات JSON: الكائن (Object) والمصفوفة (Array). يُعد الكائن طريقة بسيطة لتخزين أي نوع من البيانات، بينما تُستخدم المصفوفة لتخزين الكائنات التي تحتوي على كائنات أخرى. 

ما هي مزايا استخدام JSON؟

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

ما هو لغة بايثون؟

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

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

ما المقصود بالسلسلة؟ 

السلسلة هي تسلسل من الأحرف. والأحرف هي رموز، مثل الحروف أو الأرقام. لذا، من الناحية الفنية، تُعد هذه الجملة سلسلة

لكن أجهزة الكمبيوتر لا تقرأ الأحرف أو الرموز. فهي تقرأ فقط الأرقام 1 و0حالة التشغيل وحالة الإيقاف، إما هذا أو ذاك؛ بعبارة أخرى — النظام الثنائي

على الرغم من أنك ترى الأحرف على شاشة الكمبيوتر — إلا أن الكمبيوتر يقوم، خلف الكواليس، بتحويل هذه الأحرف أو ترميزها إلى أرقام 1 و0. ويُطلق على العملية العكسية (تحويل الأرقام الثنائية إلى أحرف) اسم «فك الترميز». 

ببساطة، السلسلة في لغة بايثون هي تسلسل من الأحرف التي تعمل على تحويل الأوامر البشرية إلى اللغة الثنائية التي تفهمها أجهزة الكمبيوتر. 

ما هي الوحدات النمطية في لغة بايثون؟ 

تقوم الوحدات النمطية بتقسيم البرامج الكبيرة إلى ملفات صغيرة يمكن إدارتها وتنظيمها. في لغة بايثون، تشير هذه المصطلحات إلى الملفات التي تحتوي على عبارات وتعريفات لغة بايثون. فعلى سبيل المثال، يُعد الملف الذي يحتوي على كود لغة بايثون، مثل example.py، وحدة نمطية. ويكون اسم هذه الوحدة النمطية هو «example». 

كيفية تحليل JSON في لغة بايثون.

يمكنك استخدام وحدة JSON في لغة Python للتعامل مع JSON (سلسلة نصية أو ملف يحتوي على كائن JSON). ومن الأفضل استيراد الوحدة قبل استخدامها.

استيراد ملف JSON

تسهل وحدة JSON تحليل سلاسل JSON والملفات التي تحتوي على كائنات JSON.

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

أبسط طريقة هي استخدام الدالة المدمجة «json». فهي تقبل معلمة اختيارية تُسمى «indent» تحدد مقدار المسافة البادئة التي يجب استخدامها عند تحليل البيانات المدخلة. 

إذا كانت القيمة «None»، فلن يكون هناك تباعد. وإلا، فسيتم إضافة مسافة واحدة على الأقل قبل كل سطر جديد من التعليمات البرمجية. 

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

ولكن ماذا لو احتجت إلى استخراج قيم متعددة من نفس البنية، أو أردت تحويل سلسلة JSON إلى قاموس في Python يحتوي على بنى متداخلة؟ في مثل هذه الحالات، من الأفضل استخدام طريقة «json.loads».

طريقة json.loads

import json
person = '{"name": "Steve", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])

هنا، «person» عبارة عن سلسلة JSON، و«person_dict» عبارة عن قاموس.

سيؤدي هذا إلى إرجاع جميع المفاتيح والقيم الموجودة في البيانات المدخلة على شكل قواميس. وفي حالة عدم وجود أي مفاتيح، فسيتم إرجاع القيمة «None» لزوج المفتاح/القيمة هذا. ويتم تحديد القيمة المرتبطة بكل زوج من المفاتيح والقيم من خلال البحث عن مدخله في القاموس باستخدام اسمه.

قراءة ملف JSON باستخدام لغة بايثون

يمكنك استخدام طريقة json.load لقراءة ملف يحتوي على كائن JSON.

{"name": "Steve", 
"languages": ["English", "French"]
}

إليك كيفية تحليل هذا الملف:

import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print(data)

تحويل لغة بايثون إلى سلسلة JSON

يمكنك تحويل قاموس إلى سلسلة JSON باستخدام طريقة json.dumps.

import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)

كتابة JSON في ملف 

لكتابة JSON في ملف باستخدام لغة Python، يمكننا استخدام الدالة json.dump().

import json
person_dict = {"name": "Steve",
"languages": ["English", "French"],
"married": False,
"age": 33
}
with open('person.txt', 'w') as json_file:
  json.dump(person_dict, json_file)

في البرنامج أعلاه، قمنا بفتح ملف باسم person.txt في وضع الكتابة باستخدام الرمز «w». وإذا لم يكن الملف موجودًا بالفعل، فسيتم إنشاؤه. بعد ذلك، تقوم دالة json.dump بتحويل person_dict إلى سلسلة JSON يتم حفظها في ملف person.txt.

عند تشغيل البرنامج، يقوم بإنشاء ملف person.txt. ويحتوي الملف على النص التالي.

{"name": "Steve", "languages": ["English", "French"], "married": false, "age": 33} 

عرض JSON بشكل منظم في لغة بايثون

لتحليل بيانات JSON وتصحيح أخطائها، قد نحتاج إلى عرضها بتنسيق يسهل قراءته. يمكنك القيام بذلك عن طريق تمرير المعلمتين الإضافيتين indent و sort_keys إلى json.dumps وإلى الدالة json.dump.

import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))

عند تشغيل البرنامج، سيكون الناتج كما يلي:

{
    "languages": "English",
    "name": "Bob",
    "numbers": [
        2,
        1.6,
        null
    ]
}

في البرنامج أعلاه، استخدمنا أربع مسافات للتبسيط، مع ترتيب المفاتيح ترتيبًا تصاعديًا.

بالمناسبة، القيمة الافتراضية لـ indent هي None، والقيمة الافتراضية لـ sort_keys هي False. 

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

الأسئلة الشائعة

من الذي ابتكر لغة JSON؟

ابتكره دوغلاس كروكفورد في عام 1999 كبديل لـ XML.

ما هي شجرة الصياغة؟

تُظهر شجرة النحو بنية اللغة بصريًّا. وهي تقسم اللغة إلى أجزاء الجملة، متجاهلةً السياق عمومًا.

كيف يمكن قراءة ملف JSON محلي في لغة Python؟

أولاً، قم باستيراد وحدة json، ثم افتح الملف باستخدام اسم ملف json بواسطة الدالة open(). بعد ذلك، اقرأ ملف json باستخدام الدالة load()، ثم قم بتخزين بيانات json في متغير.

في هذا المقال:
توقف عن القلق بشأن جودة الوكيل الخاص بك

نضمن أن بروكسيات ISP الثابتة الخاصة بنا خالية تمامًا من أي مشاكل ومخصصة لك بنسبة 100٪. لا توجد أعباء مشتركة، بل أداء فائق فقط.

الحصول على بروكسيات ثابتة من مزودي خدمة الإنترنت

توقف عن التعرض للحظر. ابدأ في التوسع اليوم.

انضم إلى أكثر من 24,100 شركة تستخدم بروكسيات سكنية وبروكسيات مزودي خدمات الإنترنت (ISP) الأكثر موثوقية لجمع البيانات في الوقت الفعلي على نطاق واسع.

مجموعة عناوين IP تزيد عن 100 مليون
التفعيل الفوري
دعم فني على مدار الساعة طوال أيام الأسبوع