تحويل النصوص إلى JSON باستخدام دالة json.dumps() في Python

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

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

محتوى المقال

تحويل النصوص إلى JSON باستخدام دالة json.dumps() في Python

تعد لغة Python واحدة من أكثر اللغات شعبية في عالم البرمجة، وذلك بفضل سهولة تعلمها وقوتها في التعامل مع مختلف أنواع البيانات. من بين الميزات الهامة في Python هي القدرة على التعامل مع تنسيق JSON (JavaScript Object Notation)، وهو تنسيق خفيف الوزن لتبادل البيانات. في هذا المقال، سنتعرف على كيفية تحويل النصوص إلى JSON باستخدام دالة json.dumps() في Python، مع أمثلة عملية توضح كيفية استخدامها بكفاءة.

ما هو JSON ولماذا نستخدمه؟

JSON هو تنسيق نصي يستخدم لتمثيل البيانات بشكل هيكلي يسهل قراءته وفهمه لكل من البشر والآلات. يُستخدم JSON بشكل واسع في تبادل البيانات بين الخوادم والتطبيقات، خاصة في تطبيقات الويب. يتميز JSON بكونه بسيطًا وخفيفًا، ويدعم أنواع بيانات متعددة مثل السلاسل النصية، الأرقام، القوائم، والقواميس.

مزايا استخدام JSON

  • سهولة القراءة والكتابة: JSON يستخدم تنسيقًا بسيطًا يسهل فهمه وتعديله.
  • دعم واسع: العديد من لغات البرمجة تدعم JSON بشكل مدمج.
  • كفاءة في نقل البيانات: حجم JSON صغير مقارنةً بتنسيقات أخرى مثل XML.

دالة json.dumps() في Python

في Python، تُستخدم دالة json.dumps() لتحويل كائنات Python إلى سلسلة نصية بتنسيق JSON. الكلمة "dumps" هي اختصار لـ "dump string"، مما يشير إلى تحويل الكائن إلى نص. هذه الدالة مفيدة عند الحاجة إلى إرسال البيانات عبر الشبكات أو تخزينها في ملفات بصيغة JSON.

التركيب العام لدالة json.dumps()

الدالة json.dumps() تأخذ كائن Python كمعامل وتعيد سلسلة نصية بتنسيق JSON. يمكن أن تأخذ الدالة معاملات اختيارية لتخصيص عملية التحويل، مثل تحديد المسافة البادئة (indentation) لتحسين قابلية القراءة.

كيفية استخدام json.dumps() لتحويل النصوص إلى JSON

لتحويل النصوص أو أي كائنات Python أخرى إلى JSON، يجب أولاً استيراد مكتبة json المدمجة في Python. بعد ذلك، يمكن استخدام دالة json.dumps() لتحويل الكائن إلى سلسلة JSON.

مثال بسيط على استخدام json.dumps()

في هذا المثال، سنقوم بتحويل قاموس (dictionary) يحتوي على بيانات بسيطة إلى سلسلة JSON.

import json

data = {
  'name': 'أحمد',
  'age': 30,
  'city': 'القاهرة'
}

json_data = json.dumps(data, ensure_ascii=False, indent=4)

print(json_data)

في هذا المثال:

  • قمنا باستيراد مكتبة json.
  • أنشأنا قاموسًا يحتوي على بيانات الشخص.
  • استخدمنا دالة json.dumps() لتحويل القاموس إلى سلسلة JSON مع تحديد المعاملات ensure_ascii=False لدعم الأحرف العربية وindent=4 لتنسيق JSON بشكل جميل.
  • أخيرًا، قمنا بطباعة سلسلة JSON الناتجة.

الناتج سيكون:

{
    "name": "أحمد",
    "age": 30,
    "city": "القاهرة"
}
    

تحويل قائمة إلى JSON

يمكن أيضًا استخدام دالة json.dumps() لتحويل القوائم (lists) إلى JSON. دعونا ننظر إلى مثال:

import json

fruits = ['تفاح', 'موز', 'برتقال']

json_fruits = json.dumps(fruits, ensure_ascii=False, indent=2)

print(json_fruits)

الناتج سيكون:

[
  "تفاح",
  "موز",
  "برتقال"
]
    

المعاملات الشائعة في json.dumps()

تقدم دالة json.dumps() مجموعة من المعاملات التي تتيح لك تخصيص عملية التحويل. من بين هذه المعاملات الأكثر استخدامًا:

1. ensure_ascii

يحدد ما إذا كان يجب التأكد من أن الناتج يحتوي فقط على أحرف ASCII. عند تعيينه إلى False، يتم دعم الأحرف غير ASCII مثل الأحرف العربية.

2. indent

يحدد عدد المسافات التي يجب استخدامها لتنسيق JSON بشكل منظم. يساعد هذا في جعل JSON الناتج أكثر قابلية للقراءة.

3. separators

يحدد العناصر الفاصلة بين العناصر والمفاتيح والقيم في JSON. الافتراضي هو (',', ': ').

4. sort_keys

يحدد ما إذا كان يجب ترتيب مفاتيح القواميس في JSON بترتيب تصاعدي. عند تعيينه إلى True، يتم ترتيب المفاتيح.

أمثلة متقدمة على استخدام json.dumps()

لنستعرض بعض الأمثلة المتقدمة التي توضح كيفية استخدام دالة json.dumps() بطرق أكثر تعقيدًا.

تحويل كائن يحتوي على أنواع بيانات متعددة

يمكن لـ json.dumps() التعامل مع أنواع بيانات متعددة مثل القواميس، القوائم، الأعداد، والسلاسل النصية.

import json

person = {
  'name': 'ليلى',
  'age': 25,
  'is_student': True,
  'courses': ['رياضيات', 'فيزياء'],
  'address': {
    'مدينة': 'الإسكندرية',
    'شارع': 'المطرية'
  }
}

json_person = json.dumps(person, ensure_ascii=False, indent=4)

print(json_person)

الناتج سيكون:

{
    "name": "ليلى",
    "age": 25,
    "is_student": true,
    "courses": [
        "رياضيات",
        "فيزياء"
    ],
    "address": {
        "مدينة": "الإسكندرية",
        "شارع": "المطرية"
    }
}
    

استخدام المعاملات لتنسيق JSON

يمكنك تخصيص تنسيق JSON الناتج باستخدام معاملات متعددة في دالة json.dumps(). دعونا ننظر إلى مثال يستخدم جميع المعاملات المذكورة سابقًا.

import json

data = {
  'b': 2,
  'a': 1,
  'c': 3
}

json_data = json.dumps(data, ensure_ascii=False, indent=2, separators=(',', ' : '), sort_keys=True)

print(json_data)

الناتج سيكون:

{
  "a" : 1,
  "b" : 2,
  "c" : 3
}
    

التعامل مع الكائنات المخصصة

في بعض الأحيان، قد تحتاج إلى تحويل كائنات مخصصة (Custom Objects) إلى JSON. يمكن تحقيق ذلك من خلال توفير دالة لتحويل الكائن إلى تمثيل يمكن تحويله إلى JSON.

مثال على تحويل كائن مخصص

import json

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

def to_dict(self):
  return {
    'name': self.name,
    'age': self.age
  }

person = Person('سلمان', 28)

json_person = json.dumps(person, default=lambda o: o.to_dict(), ensure_ascii=False, indent=4)

print(json_person)

الناتج سيكون:

{
    "name": "سلمان",
    "age": 28
}
    

في هذا المثال:

  • قمنا بتعريف فئة Person تحتوي على خصائص name و age.
  • أضفنا دالة to_dict() لتحويل كائن Person إلى قاموس.
  • استخدمنا معامل default في دالة json.dumps() لتحديد كيفية تحويل الكائنات المخصصة.

التعامل مع القيم غير القابلة للتحويل إلى JSON

ليس كل كائن في Python يمكن تحويله مباشرة إلى JSON. على سبيل المثال، الكائنات مثل الدوال أو الفئات لا يمكن تحويلها. للتعامل مع هذه الحالات، يمكن استخدام معامل default لتحديد كيفية تحويل هذه الكائنات.

مثال على التعامل مع كائن غير قابل للتحويل

import json

data = {
  'function': lambda x: x
}

json_data = json.dumps(data, default=str, ensure_ascii=False, indent=4)

print(json_data)

الناتج سيكون:

{
    "function": " at 0x7f8e2c4b7a60>"
}
    

في هذا المثال، استخدمنا دالة str لتحويل الدالة lambda إلى سلسلة نصية، مما يسمح بتحويل الكائن إلى JSON بشكل صحيح.

مقارنة بين json.dumps() و json.dump()

بينما تُستخدم دالة json.dumps() لتحويل كائن Python إلى سلسلة نصية بتنسيق JSON، تُستخدم دالة json.dump() لكتابة كائن Python مباشرة إلى ملف بتنسيق JSON.

استخدام json.dump() لكتابة JSON إلى ملف

بدلاً من تحويل الكائن إلى سلسلة نصية، يمكن استخدام دالة json.dump() لكتابة البيانات مباشرة إلى ملف.

import json

data = {
  'name': 'منى',
  'age': 22,
  'city': 'طنطا'
}

with open('data.json', 'w', encoding='utf-8') as file:
  json.dump(data, file, ensure_ascii=False, indent=4)

في هذا المثال، تم كتابة بيانات القاموس مباشرة إلى ملف data.json بتنسيق JSON منظم.

أفضل الممارسات عند استخدام json.dumps()

لضمان استخدام فعال وآمن لدالة json.dumps()، يُنصح باتباع بعض أفضل الممارسات:

  • استخدام ensure_ascii=False عند التعامل مع أحرف غير ASCII: هذا يضمن عرض الأحرف بشكل صحيح دون تشفيرها.
  • تنسيق JSON باستخدام indent: يساعد في جعل JSON الناتج أكثر قابلية للقراءة.
  • معالجة الكائنات المخصصة باستخدام معامل default: لضمان تحويل جميع أنواع البيانات بشكل صحيح.
  • التحقق من صحة البيانات قبل التحويل: لضمان أن البيانات قابلة للتحويل إلى JSON دون أخطاء.

الخلاصة

يُعد تحويل النصوص والكائنات إلى تنسيق JSON باستخدام دالة json.dumps() في Python عملية بسيطة وفعالة تسهل تبادل البيانات وتخزينها. من خلال فهم كيفية استخدام هذه الدالة والمعاملات المتاحة لها، يمكنك تحسين عمليات البرمجة الخاصة بك وجعلها أكثر كفاءة ومرونة. سواء كنت تعمل على تطبيق ويب، تحليل بيانات، أو أي مشروع برمجي آخر، فإن إتقان التعامل مع JSON في Python يعد مهارة قيمة.

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