Преобразование динамического объекта python в json

Возможный дубликат:
Python сериализуемые объекты json

Мне нужно знать, как преобразовать динамический объект python в JSON. Объект должен иметь возможность иметь несколько дочерних объектов объектов уровня. Например:

class C(): pass
class D(): pass

c = C()
c.dynProperty1 = "something"
c.dynProperty2 = { 1, 3, 5, 7, 9 }
c.d = D()
c.d.dynProperty3 = "d.something"

# ... convert c to json ...

Используя python 2.6 следующий код:

import json

class C(): pass
class D(): pass

c = C()
c.what = "now?"
c.now = "what?"
c.d = D()
c.d.what = "d.what"

json.dumps(c.__dict__)

выдает следующую ошибку:

TypeError: <__main__.D instance at 0x99237ec> is not JSON serializable

Я не знаю, какие типы подобъектов пользователь может вставить в c. Есть ли решение, достаточно умное, чтобы определить, является ли атрибут объектом и его синтаксический анализ __dict__ автоматически?

ОБНОВЛЕНО для включения подобъектов на c.

Ответ 1

Укажите параметр default= (doc):

json.dumps(c, default=lambda o: o.__dict__)

Ответ 2

json.dumps(c.__dict__)

Это даст вам общий объект JSON, если это то, что вы собираетесь делать.

Ответ 3

Попробуйте использовать этот пакет python-jsonpickle

Библиотека Python для сериализации любого произвольного графа объектов в JSON. Он может принимать почти любой объект Python и превращать объект в JSON. Кроме того, он может восстановить объект обратно в Python.

Ответ 4

json.dumps ожидает, что в качестве параметра будет указан диктатор. Для экземпляра c атрибут c.__dict__ является именем атрибута сопоставления словаря соответствующим объектам.