Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

فك تشفير JSON مخصص

الدرس 9 من 9 في دورة Python JSON على Coddy.

يعد فك ترميز JSON المخصص ميزة متقدمة في وحدة json في لغة Python تتيح لك التحكم في كيفية تحويل بيانات JSON إلى كائنات Python. وهذا مفيد بشكل خاص عند التعامل مع هياكل بيانات معقدة أو عندما تريد إنشاء كائنات Python محددة من بيانات JSON.

الفئة JSONDecoder

لتنفيذ فك ترميز JSON مخصص، تحتاج إلى إنشاء فئة فرعية من فئة json.JSONDecoder وتجاوز طريقة object_hook الخاصة بها:


import json

class CustomDecoder(json.JSONDecoder):
    def object_hook(self, dct):
        # منطق فك الترميز المخصص هنا
        return dct

استخدام وحدة فك الترميز المخصصة

بمجرد تحديد وحدة فك الترميز المخصصة، يمكنك استخدامها مع json.loads() أو json.load():


decoded_object = json.loads(json_string, cls=CustomDecoder)

مثال: فك الترميز إلى كائنات مخصصة

دعونا نلقي نظرة على مثال عملي حيث نقوم بفك ترميز بيانات JSON إلى كائنات Python مخصصة:


import json
from datetime import datetime

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

class CustomDecoder(json.JSONDecoder):
    def object_hook(self, dct):
        if 'name' in dct and 'birthdate' in dct:
            return Person(dct['name'], datetime.fromisoformat(dct['birthdate']))
        return dct

json_string = '{"name": "Alice", "birthdate": "1990-05-15"}'
person = json.loads(json_string, cls=CustomDecoder)

print(type(person))  # المخرجات: <class '__main__.Person'>
print(person.name)   # المخرجات: Alice
print(person.birthdate)  # المخرجات: 1990-05-15 00:00:00

نقاط رئيسية

  • يتم استدعاء طريقة object_hook لكل كائن يتم فك ترميزه.
  • يمكنك التحقق من مفاتيح أو أنماط محددة لتحديد كيفية فك ترميز الكائن.
  • قم بإرجاع الكائن كما هو إذا لم تكن هناك حاجة لفك ترميز مخصص لهذا الهيكل المعين.
  • تعد وحدات فك الترميز المخصصة مفيدة لإنشاء كائنات خاصة بالمجال مباشرة من بيانات JSON.

باستخدام وحدات فك ترميز JSON المخصصة، يمكنك دمج بيانات JSON بسلاسة في نموذج الكائنات الخاص بتطبيق Python، مما يجعل إلغاء تسلسل البيانات أكثر مرونة وتوافقاً مع احتياجاتك الخاصة.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

قم بإنشاء مفكك رموز JSON مخصص لنظام بيانات الطقس. يجب أن يقوم مفكك الرموز بتحويل سلاسل JSON إلى كائنات WeatherData بخصائص وتحويلات محددة. قم بتنفيذ ما يلي:

  1. قم بتعريف فئة WeatherData بخصائص: location، و temperature، و humidity، و conditions.
  2. قم بإنشاء فئة فرعية مخصصة من JSONDecoder تقوم بما يلي:
    • تحويل درجة الحرارة من فهرنهايت إلى مئوية، مقربة إلى منزلة عشرية واحدة.
    • التأكد من تمثيل الرطوبة كنسبة مئوية (على سبيل المثال، 0.65 تصبح 65%).
    • جعل الحرف الأول من كل كلمة في سلسلة conditions حرفاً كبيراً.
  3. قم بتنفيذ دالة تأخذ سلسلة JSON، وتستخدم مفكك الرموز المخصص لتحليلها، وتعيد سلسلة نصية منسقة ببيانات الطقس.

سيتم توفير المدخلات التالية:


{"location": "new york", "temperature": 72, "humidity": 0.65, "conditions": "partly cloudy"}

اطبع السلسلة النصية المنسقة الناتجة بالتنسيق التالي:

"Location: [location], Temperature: [temp]°C, Humidity: [humidity], Conditions: [conditions]"

جرّب بنفسك

Here's a suitable starter code for the challenge:

```python
import json

# Read input
json_string = input()

class WeatherData:
    def __init__(self, location, temperature, humidity, conditions):
        self.location = location
        self.temperature = temperature
        self.humidity = humidity
        self.conditions = conditions

class CustomJSONDecoder(json.JSONDecoder):
    def __init__(self, *args, **kwargs):
        json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

    def object_hook(self, dct):
        # TODO: Implement the custom decoding logic here
        pass

def parse_weather_data(json_string):
    # TODO: Implement the parsing function here
    pass

# TODO: Use the CustomJSONDecoder and parse_weather_data function to process the input

# Placeholder for the result
result = "Location: [location], Temperature: [temp]°C, Humidity: [humidity], Conditions: [conditions]"

# Output the result
print(result)
```

جميع دروس Python JSON