JSON-модуль Python не использует __get__? - PullRequest
1 голос
/ 10 февраля 2010

Когда я сериализирую список объектов с помощью пользовательского метода __get__, __get__ не вызывается и используется необработанное (необработанное пользователем) __get__ значение из __set__. Как модуль Python json выполняет итерации по элементу?

Примечание: если я перебираю список перед сериализацией, используется правильное значение, возвращаемое __get__.

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Он проверяет, являются ли объект определенными значениями или экземплярами списка, кортежа или диктовок ...

Он предоставляет метод для того, что делать, если все это не удается, и документирует, как это сделать:


import simplejson
class IterEncoder(simplejson.JSONEncoder):
  def default(self, o):
    try:
      iterable = iter(o)
    except TypeError:
      pass
    else:
      return list(iterable)
    return simplejson.JSONEncoder.default(self, o)

simplejson.dumps(YourObject,cls=IterEncoder)
0 голосов
/ 02 мая 2010

Из документации Python 3.1.2 (переформатирован для просмотра здесь, но в остальном не отредактирован):

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
          allow_nan=True, cls=None, indent=None, separators=None,
          default=None, **kw)

default (obj) - это функция, которая должна возвращать сериализуемую версию obj или повышать TypeError . По умолчанию просто возникает TypeError .

То есть ваша __get__ функция должна передаваться как default=yourcustomjsonencoder.__get__ или что-то в этом роде? Просто мысль. Я мог бы быть далеко (и, вероятно, я), но это по крайней мере идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...