2013-08-31 2 views
0

Есть ли способ сериализации класса python без использования пользовательского кодировщика? Я пробовал следующий подход, но получаю ошибку: TypeError: hello не является сериализуемым JSON, что странно, поскольку «hello» - это строка.Как сделать объект JSON сериализуемым

class MyObj(object): 

    def __init__(self, address): 
     self.address = address 

    def __repr__(self): 
     return self.address 

x = MyObj("hello") 

print json.dumps(x) 

Вывод должен быть просто

"hello" 

ответ

1

Как насчет jsonpickle?

jsonpickle is a Python library for serialization and deserialization of complex Python objects to and from JSON.

>>> class MyObj(object): 
...  def __init__(self, address): 
...   self.address = address 
...  def __repr__(self): 
...   return self.address 
... 
>>> x = MyObj("hello") 
>>> jsonpickle.encode(x) 
'{"py/object": "__main__.MyObj", "address": "hello"}' 
+0

вывода по JSON является частью успокоительной API и и такое мне нужно тщательно контролировать формат. В этом примере вывод должен быть просто «привет». – Roberto

0
import json 

class MyObj(object): 

    def __init__(self, address): 
     self.address = address 

    def __repr__(self): 
     return self.address 

    def serialize(self, values_only = False): 
     if values_only: 
      return self.__dict__.values() 
     return self.__dict__ 

x = MyObj("hello") 

print json.dumps(x.serialize()) 
print json.dumps(x.serialize(True)) 

выход

>>> 
{"address": "hello"} 
["hello"] 
+1

Это не работает, если объект находится внутри другой структуры, такой как словарь, например foo = {'obj': x}, а затем json.dumps (foo) – Roberto

Смежные вопросы