تحليل البيانات بصيغة JSON باستخدام دالة json.loads() في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 26 ديسمبر 2024

محتوى المقال

تحليل البيانات بصيغة JSON باستخدام دالة json.loads() في Python

تُعد لغة 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 يعد مهارة قيمة تساعدك على إدارة البيانات بشكل أفضل وتطوير تطبيقات أكثر قوة وفاعلية.

طور مهاراتك: مقالات يجب قراءتها في البرمجة