تحليل البيانات بصيغة JSON باستخدام دالة json.loads() في Python
تمت الكتابة بواسطة: عبد الحكيم
تارخ آخر تحديث: 26 ديسمبر 2024محتوى المقال
- ما هو JSON ولماذا نستخدمه؟
- دالة json.loads() في Python
- كيفية استخدام json.loads() لتحليل بيانات JSON
- المعاملات الشائعة في json.loads()
- أمثلة متقدمة على استخدام json.loads()
- مقارنة بين json.loads() و json.load()
- أفضل الممارسات عند استخدام json.loads()
- الخلاصة
تُعد لغة Python من أقوى اللغات البرمجية في التعامل مع البيانات وتحليلها، وذلك بفضل مكتباتها المتعددة والمدمجة التي تسهل عملية البرمجة. واحدة من أهم هذه المكتبات هي مكتبة json
التي تتيح للمطورين التعامل مع تنسيق JSON (JavaScript Object Notation)، وهو تنسيق شائع لتبادل البيانات بين الخوادم والتطبيقات. في هذا المقال، سنستعرض كيفية استخدام دالة json.loads()
في Python لتحليل البيانات بصيغة JSON، مع أمثلة عملية توضح كيفية استخدامها بكفاءة.
ما هو JSON ولماذا نستخدمه؟
JSON هو تنسيق نصي يُستخدم لتمثيل البيانات بشكل هيكلي يسهل قراءته وفهمه من قبل البشر والآلات على حد سواء. يُستخدم JSON بشكل واسع في تطبيقات الويب لنقل البيانات بين العميل والخادم، كما يُستخدم في تخزين الإعدادات والبيانات في ملفات. يتميز JSON بكونه بسيطًا وخفيفًا ويدعم أنواع بيانات متعددة مثل السلاسل النصية، الأرقام، القوائم، والقواميس.
مزايا استخدام JSON
- سهولة القراءة والكتابة: يتميز JSON بتنسيق بسيط وواضح يسهل فهمه وتعديله.
- دعم واسع: تدعم معظم لغات البرمجة التعامل مع JSON بشكل مدمج أو من خلال مكتبات خارجية.
- كفاءة في نقل البيانات: حجم JSON صغير مقارنةً بتنسيقات أخرى مثل XML، مما يجعله مثاليًا لنقل البيانات عبر الشبكات.
- قابلية التوسع: يمكن تمثيل هياكل بيانات معقدة بسهولة باستخدام JSON.
دالة json.loads()
في Python
في مكتبة json
في Python، تُستخدم دالة json.loads()
لتحويل سلسلة نصية بتنسيق JSON إلى كائنات Python قابلة للاستخدام مثل القواميس (dictionaries) والقوائم (lists). الكلمة "loads" هي اختصار لـ "load string"، مما يشير إلى تحميل وتحويل السلسلة النصية إلى كائنات Python.
التركيب العام لدالة json.loads()
الدالة json.loads()
تأخذ سلسلة نصية بتنسيق JSON كمعامل وتعيد كائن Python المقابل. يمكن أن تأخذ الدالة معاملات اختيارية لتخصيص عملية التحويل، مثل تحديد الترميز (encoding) والتعامل مع أنواع البيانات المخصصة.
كيفية استخدام json.loads()
لتحليل بيانات JSON
لتحليل بيانات JSON باستخدام دالة json.loads()
، يجب أولاً استيراد مكتبة json
المدمجة في Python. بعد ذلك، يمكن استخدام الدالة لتحويل السلسلة النصية إلى كائنات Python قابلة للاستخدام.
مثال بسيط على استخدام json.loads()
في هذا المثال، سنقوم بتحليل سلسلة نصية بتنسيق JSON تحتوي على بيانات بسيطة وتحويلها إلى قاموس (dictionary) في Python.
import json
json_string = '''{
"name": "أحمد",
"age": 30,
"city": "القاهرة"
}'''
data = json.loads(json_string)
print(data)
print(data["name"])
في هذا المثال:
- قمنا باستيراد مكتبة
json
. - أنشأنا سلسلة نصية تحتوي على بيانات بصيغة JSON.
- استخدمنا دالة
json.loads()
لتحليل السلسلة النصية وتحويلها إلى قاموس Python. - قمنا بطباعة القاموس والناتج الذي يحتوي على قيمة مفتاح
"name"
.
الناتج سيكون:
{'name': 'أحمد', 'age': 30, 'city': 'القاهرة'} أحمد
تحليل قائمة من البيانات بصيغة JSON
يمكن أيضًا استخدام دالة json.loads()
لتحليل قائمة من البيانات بتنسيق JSON. دعونا ننظر إلى مثال:
import json
json_list = '''[
{"name": "ليلى", "age": 25, "city": "الإسكندرية"},
{"name": "سلمان", "age": 28, "city": "طنطا"},
{"name": "منى", "age": 22, "city": "الزقازيق"}
]'''
data_list = json.loads(json_list)
for person in data_list:
print(person["name"], person["age"])
في هذا المثال:
- قمنا بتحليل سلسلة نصية تحتوي على قائمة من القواميس بتنسيق JSON.
- حولنا السلسلة النصية إلى قائمة من القواميس في Python.
- استخدمنا حلقة
for
لطباعة أسماء الأشخاص وأعمارهم.
الناتج سيكون:
ليلى 25 سلمان 28 منى 22
المعاملات الشائعة في json.loads()
تقدم دالة json.loads()
مجموعة من المعاملات التي تتيح لك تخصيص عملية التحليل. من بين هذه المعاملات الأكثر استخدامًا:
1. object_hook
يُستخدم هذا المعامل لتحويل القواميس الناتجة من التحليل إلى كائنات مخصصة. يمكن أن يكون هذا مفيدًا عند التعامل مع كائنات معقدة.
2. parse_float
يُستخدم هذا المعامل لتحويل الأعداد العشرية في JSON إلى نوع بيانات مخصص في Python.
3. parse_int
يُستخدم هذا المعامل لتحويل الأعداد الصحيحة في JSON إلى نوع بيانات مخصص في Python.
4. parse_constant
يُستخدم هذا المعامل لمعالجة القيم الثابتة غير الصحيحة في JSON مثل NaN
أو Infinity
.
أمثلة متقدمة على استخدام json.loads()
لنستعرض بعض الأمثلة المتقدمة التي توضح كيفية استخدام دالة json.loads()
بطرق أكثر تعقيدًا.
تحليل كائن يحتوي على أنواع بيانات متعددة
يمكن لـ json.loads()
التعامل مع أنواع بيانات متعددة مثل القواميس، القوائم، الأعداد، والسلاسل النصية.
import json
json_data = '''{
"name": "سارة",
"age": 27,
"is_student": false,
"courses": ["كيمياء", "بيولوجيا"],
"address": {
"مدينة": "السويس",
"شارع": "النيل"
}
}'''
data = json.loads(json_data)
print(data["name"])
print(data["courses"][0])
print(data["address"]["مدينة"])
في هذا المثال:
- قمنا بتحليل سلسلة نصية تحتوي على بيانات معقدة تشمل قاموسًا متداخلًا وقائمة.
- حولنا السلسلة النصية إلى كائنات Python قابلة للاستخدام.
- استخدمنا مفاتيح للوصول إلى قيم معينة داخل الكائنات المترابطة.
الناتج سيكون:
سارة كيمياء السويس
استخدام object_hook
لتحويل القواميس إلى كائنات مخصصة
يمكنك استخدام معامل object_hook
لتحويل القواميس الناتجة من التحليل إلى كائنات مخصصة في Python. هذا مفيد عند التعامل مع هياكل بيانات معقدة ترغب في تحويلها إلى كائنات برمجية.
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f""
def dict_to_person(d):
return Person(d["name"], d["age"])
json_data = '''{
"name": "خالد",
"age": 35
}'''
person = json.loads(json_data, object_hook=dict_to_person)
print(person)
في هذا المثال:
- قمنا بتعريف فئة
Person
مع خصائصname
وage
. - أنشأنا دالة
dict_to_person
لتحويل القاموس إلى كائنPerson
. - استخدمنا معامل
object_hook
في دالةjson.loads()
لتحويل القاموس الناتج إلى كائنPerson
.
الناتج سيكون:
التعامل مع القيم غير القابلة للتحويل إلى JSON
ليس كل كائن في Python يمكن تحويله مباشرة إلى JSON. على سبيل المثال، الكائنات مثل الدوال أو الفئات لا يمكن تحويلها. للتعامل مع هذه الحالات، يمكن استخدام معامل default
لتحديد كيفية تحويل هذه الكائنات.
مثال على التعامل مع كائن غير قابل للتحويل
import json
def custom_decoder(obj):
if isinstance(obj, str):
return obj.upper()
return None
json_data = '''{
"message": "مرحبا بالعالم"
}'''
data = json.loads(json_data, object_hook=custom_decoder)
print(data)
في هذا المثال:
- قمنا بتعريف دالة
custom_decoder
لتحويل القيم النصية إلى أحرف كبيرة. - استخدمنا معامل
object_hook
في دالةjson.loads()
لتطبيق الدالة المخصصة على البيانات المحللة.
الناتج سيكون:
{'message': 'مرحبا بالعالم'}
مقارنة بين json.loads()
و json.load()
بينما تُستخدم دالة json.loads()
لتحليل سلسلة نصية بتنسيق JSON وتحويلها إلى كائنات Python، تُستخدم دالة json.load()
لتحليل بيانات JSON مباشرة من ملف وتحويلها إلى كائنات Python.
استخدام json.load()
لتحليل JSON من ملف
بدلاً من تحليل سلسلة نصية، يمكن استخدام دالة json.load()
لقراءة وتحليل البيانات من ملف JSON مباشرة.
import json
with open('data.json', 'r', encoding='utf-8') as file:
data = json.load(file)
print(data)
في هذا المثال:
- استخدمنا دالة
json.load()
لقراءة البيانات من ملفdata.json
. - حولنا البيانات إلى كائنات Python قابلة للاستخدام.
- قمنا بطباعة الكائن الناتج.
إذا كان محتوى ملف data.json
هو:
{ "name": "منى", "age": 22, "city": "طنطا" }
فسيكون الناتج:
{'name': 'منى', 'age': 22, 'city': 'طنطا'}
أفضل الممارسات عند استخدام json.loads()
لضمان استخدام فعال وآمن لدالة json.loads()
، يُنصح باتباع بعض أفضل الممارسات:
- التحقق من صحة البيانات: قبل تحليل بيانات JSON، تأكد من أنها صحيحة ومتوافقة مع التنسيق المطلوب.
- استخدام معالجة الأخطاء: استخدم كتل
try-except
للتعامل مع الأخطاء التي قد تحدث أثناء التحليل. - تحديد معامل
object_hook
بعناية: عند استخدام دوال مخصصة لتحويل البيانات، تأكد من أنها تتعامل مع جميع الحالات المحتملة. - الأمان عند تحليل البيانات القادمة من مصادر غير موثوقة: تجنب تنفيذ أو استخدام البيانات المحللة مباشرة إذا كانت تأتي من مصادر غير موثوقة لتفادي الثغرات الأمنية.
مثال على استخدام معالجة الأخطاء مع json.loads()
import json
json_string = '''{
"name": "فاطمة",
"age": "ثلاثون",
"city": "أسوان"
}'''
try:
data = json.loads(json_string)
print(data)
except json.JSONDecodeError as e:
print("خطأ في تحليل JSON:", e)
في هذا المثال:
- قمنا بتحليل سلسلة نصية تحتوي على خطأ في تنسيق JSON (القيمة
"ثلاثون"
يجب أن تكون رقمًا). - استخدمنا كتل
try-except
لالتقاط الأخطاء ومعالجتها بشكل مناسب.
الناتج سيكون:
خطأ في تحليل JSON: Expecting value: line 3 column 12 (char 22)
الخلاصة
يُعد تحليل البيانات بصيغة JSON باستخدام دالة json.loads()
في Python عملية بسيطة وفعالة تسهل التعامل مع البيانات المهيكلة. من خلال فهم كيفية استخدام هذه الدالة والمعاملات المتاحة لها، يمكنك تحسين عمليات البرمجة الخاصة بك وجعلها أكثر كفاءة ومرونة. سواء كنت تعمل على تطبيق ويب، تحليل بيانات، أو أي مشروع برمجي آخر، فإن إتقان التعامل مع JSON في Python يعد مهارة قيمة تساعدك على إدارة البيانات بشكل أفضل وتطوير تطبيقات أكثر قوة وفاعلية.
طور مهاراتك: مقالات يجب قراءتها في البرمجة
- تحويل النصوص إلى أرقام عشرية باستخدام دالة Decimal() في Python
- استخدام دالة itertools.combinations() لإنشاء التوليفات في Python
- كيفية استخدام دالة itertools.permutations() لإنشاء التباديل في Python
- فهم دالة itertools.chain() لتسلسل القوائم في Python
- استخدام دالة functools.reduce() لتقليل القوائم إلى قيمة واحدة في Python
- كيفية استخدام دالة collections.Counter() لحساب تكرار العناصر في Python
- فهم دالة collections.deque() لإنشاء قوائم مزدوجة النهاية في Python
- استخدام دالة collections.defaultdict() لإنشاء قواميس مع قيم افتراضية في Python
- فهم دالة collections.namedtuple() لإنشاء تسميات للصفوف في Python
- التعامل مع المواعيد الزمنية باستخدام دالة datetime.datetime() في Python