Menu
Coddy logo textTech

Özel JSON Kod Çözme

Coddy'nin Python JSON kursunda ders 9 / 9.

Özel JSON kod çözme (decoding), Python'un json modülünün, JSON verilerinin Python nesnelerine nasıl dönüştürüleceğini kontrol etmenize olanak tanıyan gelişmiş bir özelliğidir. Bu, özellikle karmaşık veri yapılarıyla uğraşırken veya JSON verilerinden belirli Python nesneleri oluşturmak istediğinizde kullanışlıdır.

JSONDecoder Sınıfı

Özel JSON kod çözme işlemini uygulamak için json.JSONDecoder sınıfını alt sınıfa ayırmanız ve onun object_hook metodunu geçersiz kılmanız (override) gerekir:


import json

class CustomDecoder(json.JSONDecoder):
    def object_hook(self, dct):
        # Buraya özel kod çözme mantığı
        return dct

Özel Kod Çözücüyü Kullanma

Özel kod çözücünüzü tanımladıktan sonra, onu json.loads() veya json.load() ile kullanabilirsiniz:


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

Örnek: Özel Nesnelere Kod Çözme

JSON verilerini özel Python nesnelerine dönüştürdüğümüz pratik bir örneğe bakalım:


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))  # Çıktı: <class '__main__.Person'>
print(person.name)   # Çıktı: Alice
print(person.birthdate)  # Çıktı: 1990-05-15 00:00:00

Önemli Noktalar

  • object_hook metodu, kodu çözülen her nesne için çağrılır.
  • Nesnenin nasıl çözüleceğini belirlemek için belirli anahtarları veya desenleri kontrol edebilirsiniz.
  • Söz konusu yapı için özel bir kod çözme gerekmiyorsa, nesneyi olduğu gibi döndürün.
  • Özel kod çözücüler, doğrudan JSON verilerinden alana özgü (domain-specific) nesneler oluşturmak için kullanışlıdır.

Özel JSON kod çözücüleri kullanarak, JSON verilerini Python uygulamanızın nesne modeline sorunsuz bir şekilde entegre edebilir, veri serileştirmeyi (deserialization) daha esnek ve özel ihtiyaçlarınıza uygun hale getirebilirsiniz.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Bir hava durumu veri sistemi için özel bir JSON kod çözücü (decoder) oluşturun. Kod çözücü, JSON dizelerini belirli özniteliklere ve dönüşümlere sahip WeatherData nesnelerine dönüştürmelidir. Şunları uygulayın:

  1. Şu özniteliklere sahip bir WeatherData sınıfı tanımlayın: location, temperature, humidity ve conditions.
  2. Aşağıdakileri yapan özel bir JSONDecoder alt sınıfı oluşturun:
    • Sıcaklığı Fahrenheit'tan Celsius'a dönüştürür ve ondalık basamağı bire yuvarlar.
    • Nemin bir yüzde olarak temsil edilmesini sağlar (örneğin, 0.65 değeri 65% olur).
    • Hava durumu koşulları (conditions) dizesindeki her kelimenin ilk harfini büyük yapar.
  3. Bir JSON dizesi alan, onu ayrıştırmak için özel kod çözücüyü kullanan ve hava durumu verilerini içeren biçimlendirilmiş bir dize döndüren bir fonksiyon uygulayın.

Aşağıdaki girdi sağlanacaktır:


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

Sonuçlanan biçimlendirilmiş dizeyi aşağıdaki formatta yazdırın:

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

Kendin dene

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 bölümündeki tüm dersler