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

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

بنهاية هذا البرنامج التعليمي ، ستكون قد تعلمت:

  • أساسيات JSON ،
  • كيفية تحليل وإنشاء سلاسل JSON في Python و
  • كيفية القراءة من ملفات JSON والكتابة إليها في Python.

لنبدأ!

ما هو JSON؟

يرمز JSON إلى JavaScript Object Notation ، وهو تنسيق قائم على النص لتبادل البيانات. على الرغم من أن JSON مستوحاة في البداية من كائنات JavaScript ، إلا أن جميع لغات البرمجة تقريبًا تدعم العمل مع JSON.

إذا سبق لك العمل مع واجهات برمجة التطبيقات أو قراءة ملفات التكوين ، فمن المحتمل أن تكون قد واجهت JSON.

📑 تقوم بإرسال واستقبال البيانات في JSON عند الاستعلام عن واجهات برمجة التطبيقات. ويستخدم JSON أيضًا على نطاق واسع في اتصالات الخادم والعميل في تطبيقات البرامج. بالإضافة إلى ذلك ، يمكنك استخدام JSON لتخزين البيانات للأغراض العامة أيضًا.

تنسيق JSON مشابه جدًا لتنسيق قاموس Python. القواميس هي هياكل بيانات مضمنة قوية في Python تخزن البيانات في أزواج ذات قيمة رئيسية.

قبل أن نذهب إلى أبعد من ذلك ، إليك بعض النقاط الجديرة بالملاحظة:

  • في Python ، يتم تخزين كائن JSON كقاموس.
  • يتم تخزين المصفوفة في JSON كقائمة Python.
  • في JSON ، يُشار إلى القيم المنطقية على أنها صحيحة وخاطئة. في Python ، يتم تحويلها إلى Booleans True and False.

لمزيد من التفاصيل حول أنواع البيانات المترجمة من JSON إلى Python ، اقرأ المستندات هنا.

نظرًا لأن وحدة json هي جزء من مكتبة Python القياسية ، فلن تضطر إلى تثبيتها. يمكنك الاستيراد إلى دليلك الحالي ، مثل هذا:

import json

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

الصيغة العامة لتحميل سلسلة JSON في Python هي:

<dict_obj> = json.loads(<json_str>)

هنا،

  • هو قاموس Python الذي تريد تحميل سلسلة JSON إليه ،
  • هو أي سلسلة JSON صالحة.

يؤدي هذا إلى تحميل في قاموس Python .

دعونا نبرمج مثالا. هنا 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>)

هنا،

  • هو قاموس Python الذي ترغب في إنشاء سلسلة JSON منه ،
  • هي سلسلة JSON الناتجة.

لذا فإن طريقة dumps () تفرغ في سلسلة JSON .

إلى قاموس Python الموجود لدينا py_dict. دعونا نضيف “أفلام” مفتاح جديد. يمكنك القيام بذلك كما هو موضح في مقتطف الشفرة التالي:

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 الناتجة بدون التنسيق المناسب. يمكنك استخدام مسافة بادئة للمعلمة الاختيارية لإضافة مسافة بادئة.

ويمكنك القيام بذلك عن طريق ضبط المسافة البادئة على عدد صحيح مثل 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"
    }
  ]

وتظهر المفاتيح الآن بترتيب أبجدي: “المؤلف” و “العنوان” و “السنة”.

لقد تعلمت حتى الآن كيفية التعامل مع سلاسل JSON في Python. في القسم التالي ، ستتعلم كيفية التعامل مع ملفات JSON.

كيف تقرأ ملف JSON في بايثون

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

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

لاحظ كيف نستخدم طريقة load () وليس طريقة loads (). يُحمّل () سلسلة JSON ، بينما يُحمّل () ملف 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 موجود أو لإنشاء ملف JSON جديد ، استخدم طريقة التفريغ () كما هو موضح:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

لذا فإن الصيغة أعلاه تفرغ القاموس في ملف JSON .

في القسم السابق ، كان لدينا القاموس py_dict. الآن دعنا نفرغ ذلك في ملف JSON جديد. ودعنا نسميها new_file.json.

وتوضح خلية الكود التالية كيف يمكنك استخدام وظيفة التفريغ ():

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

ملاحظة: يؤدي فتح ملف في وضع الكتابة (w) إلى الكتابة فوق المحتوى إذا كان الملف موجودًا. إذا كان الملف غير موجود ، يتم إنشاء الملف.

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

قم بإنشاء ملف JSON في Python

عند الكتابة إلى الملفات ، يكون الهدف الرئيسي هو تخزين البيانات. وإذا كنت ترغب في الحفاظ على التنسيق ، فيمكنك أيضًا استخدام معلمات المسافة البادئة و sort_keys.

استنتاج

حان الوقت للحصول على ملخص سريع.

لقد تعلمت في هذا البرنامج التعليمي:

  • أساسيات استخدام JSON ،
  • كيفية استخدام طرق loads () و load () لقراءة ملفات JSON و JSON على التوالي ،
  • كيفية استخدام التابعين dumps () و dump () لتفريغ قواميس Python في سلاسل JSON وملفات JSON على التوالي.

أتمنى أن تكون قد وجدت هذا البرنامج التعليمي مفيدًا. تعلم سعيد!

يمكنك أيضًا الاطلاع على أدوات JSON للتحليل والتنسيق والتحقق من الصحة.

  كيف تكتب على ملف PDF في عام 2022