حفظ البيانات المهيكلة بصيغة JSON في بايثون

من موسوعة حسوب

يمكن قراءة وكتابة السلاسل النصية في الملفات بسهولة ويسر، أما الأرقام فتحتاج إلى المزيد من الجهد لأنّ التابع read()‎ يعيد السلاسل النصية فقط والتي يجب تمريرها إلى دالة مثل int()‎ والتي تأخذ سلسلة نصية مثل '123' وتعيد القيمة العددية 123. أما البيانات الأكثر تعقيدًا مثل القوائم أو القواميس المتداخلة فتحتاج إلى عمليات تحليل (parsing) وسَلسَلة (serializing) لا يمكن القيام بها بصورة يدوية.

وبدلًا من إجبار المستخدمين على كتابة الشيفرات وتنقيحها بصورة مستمرة لغرض حفظ البيانات المعقّدة في الملفات، تتيح بايثون استخدام صيغة تبادل البيانات المعروفة JSON (اختصار JavaScript Object Notation).

تحوّل الوحدة القياسية json أنواع البيانات في بايثون إلى سلاسل نصية تمثّل تلك البيانات في عملية تدعى بالسَلسَلة، وتعيد هذه الوحدة بناء البيانات من السلاسل النصية الممثّلة لها في عملية تدعى بإلغاء السلسلة (deserializing).

وبين هاتين العمليتين يمكن للسِلسلة النصية التي تمثّل الكائن أن تخزّن على هيئة ملفّ أو بيانات أو تُرسل عبر الشبكة إلى حاسوب آخر.

ملاحظة:

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

يمكن مشاهدة السلسلة النصية الممثّلة لأي كائن باستخدام الشيفرة التالية:

>>> import json
>>> json.dumps([1, 'simple', 'list'])
'[1, "simple", "list"]'

تقدّم بايثون دالة أخرى مشابهة هي الدالة dump()‎ والتي تقوم بسلسلة الكائن إلى ملف نصّي. إذا كان هناك كائن ملف نصي باسم f ومفتوح للكتابة فيمكن القيام بما يلي:

json.dump(x, f)

ويمكن استخدام الدالة load()‎ لفك ترميز الكائن من جديد، فإن كان كائن الملف النصي f مفتوحًا للقراءة مثلًا:

x = json.load(f)

يمكن لأسلوب السلسلة البسيط هذا أن يتعامل مع القوائم والقواميس، ولكن تحتاج عملية سلسلة الأصناف إلى المزيد من الجهد.

يمكن مراجعة توثيق الوحدة json للمزيد من التفاصيل.

مصادر