كيفية تحليل JSON في بايثون
نشرت: 2022-02-09JSON هو تنسيق شائع لتبادل البيانات. يتم شحن Python مع وحدة JSON مضمنة لتحليل بيانات JSON والعمل معها. وسيعلمك هذا البرنامج التعليمي كل شيء عن العمل مع JSON في Python.
بنهاية هذا البرنامج التعليمي ، ستكون قد تعلمت:
- أساسيات JSON ،
- كيفية تحليل وإنشاء سلاسل JSON في Python و
- كيفية القراءة من ملفات JSON والكتابة إليها في Python.
لنبدأ!
ما هو JSON؟
يرمز JSON إلى J ava S cript O bject N otation ، وهو تنسيق نصي لتبادل البيانات. على الرغم من أن JSON مستوحاة في البداية من كائنات JavaScript ، إلا أن جميع لغات البرمجة تقريبًا تدعم العمل مع JSON.
إذا سبق لك العمل مع واجهات برمجة التطبيقات أو قراءة ملفات التكوين ، فمن المحتمل أن تكون قد واجهت JSON.
تقوم بإرسال واستقبال البيانات في JSON عند الاستعلام عن واجهات برمجة التطبيقات. ويستخدم JSON أيضًا على نطاق واسع في اتصالات الخادم والعميل في تطبيقات البرامج. بالإضافة إلى ذلك ، يمكنك استخدام JSON لتخزين البيانات للأغراض العامة أيضًا.
تنسيق JSON مشابه جدًا لتنسيق قاموس Python. القواميس هي هياكل بيانات مضمنة قوية في Python تخزن البيانات في أزواج ذات قيمة رئيسية.
قبل أن نذهب إلى أبعد من ذلك ، إليك بعض النقاط الجديرة بالملاحظة:
- في Python ، يتم تخزين كائن JSON كقاموس.
- يتم تخزين المصفوفة في JSON كقائمة Python.
- في JSON ، يُشار إلى القيم المنطقية على أنها
true
false
. في Python ، يتم تحويل هذه إلى قيمة منطقيةTrue
False
.
لمزيد من التفاصيل حول أنواع البيانات المترجمة من JSON إلى Python ، اقرأ المستندات هنا.
نظرًا لأن وحدة json
هي جزء من مكتبة Python القياسية ، فلن تضطر إلى تثبيتها. يمكنك الاستيراد إلى دليلك الحالي ، مثل هذا:
import json
كيفية تحميل سلسلة JSON في بايثون
الصيغة العامة لتحميل سلسلة JSON في Python هي:
<dict_obj> = json.loads(<json_str>)
هنا،
-
<dict_obj>
هو قاموس Python الذي تريد تحميل سلسلة JSON إليه ، -
<json_str>
هو أي سلسلة JSON صالحة.
يؤدي هذا إلى تحميل <json_str>
في قاموس Python <dict_obj>
.
دعونا نبرمج مثالا. هنا json_str
عبارة عن سلسلة JSON.
json_str = ''' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''
ويوضح مقتطف الشفرة أدناه كيف يمكنك تحميل سلسلة JSON json_str
في قاموس Python باستخدام طريقة loads()
. يمكنك استخدام دالة type()
المضمنة للتحقق من أن py_dict
هو قاموس Python.
py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
كما هو موضح في الكود أعلاه ، فإن جميع الحقول في سلسلة JSON هي أزواج مفتاح-قيمة في py_dict
.
كيفية إنشاء سلاسل JSON في بايثون
لنفترض أن لديك قاموس بايثون. إذن كيف تنشئ سلسلة JSON منه؟
يمكنك القيام بذلك باستخدام طريقة dumps()
بهذه الصيغة:
<json_str> = json.dumps(<dict_obj>)
هنا،
-
<dict_obj>
هو قاموس Python الذي ترغب في إنشاء سلسلة JSON منه ، -
<json_str>
هي سلسلة JSON الناتجة.
لذا فإن طريقة dumps()
<dict_obj>
في سلسلة JSON <json_str>
.
إلى قاموس Python الموجود لدينا py_dict
. دعونا نضيف "movies"
مفتاح جديد. يمكنك القيام بذلك كما هو موضح في مقتطف الشفرة التالي:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]
الآن ، دعنا نفرغ القاموس المعدل إلى سلسلة JSON جديدة json_str2
باستخدام طريقة dumps()
.
json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
كما ترى في المثال أعلاه ، يصعب قراءة سلسلة JSON الناتجة بدون التنسيق المناسب. يمكنك استخدام indent
للمعلمة الاختيارية لإضافة مسافة بادئة.
ويمكنك القيام بذلك عن طريق ضبط indent
على عدد صحيح مثل 2 ، كما هو موضح أدناه:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
لاحظ كيف تم تنسيق الإخراج باستخدام المسافة البادئة ، ومن السهل متابعته.

ملاحظة : إذا كنت تريد فرز المفاتيح بترتيب أبجدي ، فيمكنك تعيين معلمة
sort_keys
علىTrue
.
كما ترى في مقتطف الشفرة أدناه ، فقد تم الآن فرز المفاتيح بترتيب أبجدي.
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]
وتظهر المفاتيح الآن بترتيب أبجدي: "author"
و "title"
و "year"
.
لقد تعلمت حتى الآن كيفية التعامل مع سلاسل JSON في Python. في القسم التالي ، ستتعلم كيفية التعامل مع ملفات JSON.
كيف تقرأ ملف JSON في بايثون
لقراءة ملف JSON في بايثون ، استخدم الصيغة التالية:
json.load(<json-file>) # where <json-file> is any valid JSON file.
لاحظ كيف نستخدم طريقة
load()
وليس طريقةloads()
.loads()
سلسلة JSON ، بينماload()
ملف JSON .
يجب أن تفكر في استخدام مديري السياق عند العمل مع الملفات في Python. يمكنك أيضًا محاولة قراءة الملفات على النحو التالي ، دون استخدام مدير السياق:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
إذا لم تغلق الملف ، فقد يكون هناك إهدار محتمل للموارد.
ومع ذلك ، عند العمل مع مديري السياق ، يتم إغلاق الملفات تلقائيًا بمجرد اكتمال عمليات الملف.
ويمكنك استخدام مدير السياق لقراءة الملفات كما هو موضح أدناه:
with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
أثناء القراءة من ملف ، حدد الوضع كما هو مقروء - المشار إليه بحرف 'r'
في الكود أعلاه.
ملاحظة : للتنقل بسهولة عبر الدليل الحالي ، يرجى التأكد من وجود ملف JSON في نفس المجلد مثل
main.py
، كما هو موضح في الصورة أدناه. إذا كان ملف JSON الخاص بك في مجلد مختلف ، فتأكد من تحديد المسار إلى الملف.

في القسم التالي ، ستتعلم كيفية الكتابة إلى ملف JSON.
كيفية الكتابة إلى ملف JSON في بايثون
للكتابة إلى ملف JSON موجود أو لإنشاء ملف JSON جديد ، استخدم طريقة dump()
كما هو موضح:
json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file
لذا فإن الصيغة أعلاه تفرغ القاموس <dict_obj>
في ملف JSON <json_file>
.
في القسم السابق ، كان لدينا القاموس py_dict
. الآن دعنا نفرغ ذلك في ملف JSON جديد. ودعنا new_file.json
.
وتوضح خلية الكود التالية كيف يمكنك استخدام وظيفة dump()
:
with open('new_file.json','w') as file: json.dump(py_dict,file)
ملاحظة : يؤدي فتح ملف في وضع الكتابة (
w
) إلى الكتابة فوق المحتوى إذا كان الملف موجودًا. إذا كان الملف غير موجود ، يتم إنشاء الملف.
بعد تنفيذ خلية الكود أعلاه ، سترى أنه تم إنشاء ملف JSON جديد في دليل العمل الحالي. ويمكنك المضي قدمًا وفحص محتويات ملف JSON.

عند الكتابة إلى الملفات ، يكون الهدف الأساسي هو تخزين البيانات. وإذا كنت ترغب في الحفاظ على التنسيق ، فيمكنك أيضًا استخدام معلمات indent
و sort_keys
.
استنتاج
حان الوقت للحصول على ملخص سريع.
لقد تعلمت في هذا البرنامج التعليمي:
- أساسيات استخدام JSON ،
- كيفية استخدام طرق
loads()
وload()
لقراءة ملفات JSON و JSON على التوالي ، - كيفية استخدام
dumps()
وdump()
لتفريغ قواميس Python في سلاسل JSON وملفات JSON على التوالي.
أتمنى أن تكون قد وجدت هذا البرنامج التعليمي مفيدًا. تعلم سعيد!
يمكنك أيضًا إلقاء نظرة على أدوات JSON للتحليل والتنسيق والتحقق من صحة.