Ö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_hookmetodu, 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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBir 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:
- Şu özniteliklere sahip bir
WeatherDatasınıfı tanımlayın:location,temperature,humidityveconditions. - Aşağıdakileri yapan özel bir
JSONDecoderalt 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.
- 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)
```