SORU
22 EYLÜL 2010, ÇARŞAMBA


Sınıf JSON seri hale getirilebilir nasıl Python:

Bu yüzden, asıl soru bu:
Nasıl bir sınıf seri hale getirilebilir?

basit bir sınıf

class FileItem:
    def __init__(self, fname):
        self.fname = fname

Ben çıktı elde edebilmek için ne yapmam gerekir:

json.dumps()

bir hata (FileItem instance at ... is not JSON serializable)

CEVAP
22 EYLÜL 2010, ÇARŞAMBA


Beklenen çıkışı hakkında bir fikriniz var mı? Örneğin bu iş yapar mı?

>>> f  = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'

Bu durumda sadece json.dumps(f.__dict__) diyebilirsin.

Eğer daha özel çıkış sonra isterseniz JSONEncoder alt ve kendi özel serileştirme uygulamak zorunda kalacaktır.

Önemsiz bir örnek için aşağıya bakın.

>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
    def default(self, o):
        return o.__dict__    

>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'

Sonra cls kwarg gibi json.dumps() Bu yöntem bu sınıf geçmek:

json.dumps(cls=MyEncoder)

Eğer siz de kod çözme için JSONDecoder sınıf 11* *Bir özel vermeniz lazım. Örneğin

>>> def from_json(json_object):
        if 'fname' in json_object:
            return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>> 

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NikkoNantone

    NikkoNantone

    21 Kasım 2011
  • PC Learning Zone - Computer Training

    PC Learning

    8 EYLÜL 2006
  • The Onion

    The Onion

    14 Mart 2006