Python的JSON模块不使用__get__?

时间:2010-02-10 17:18:50

标签: python json

当我使用自定义__get__方法序列化对象列表时,不会调用__get__,并且会使用来自__get__的原始值(来自自定义__set__的未处理)值。 Python的json模块如何迭代项目?

注意:如果我在序列化之前迭代列表,则使用__get__返回的正确值。

2 个答案:

答案 0 :(得分:1)

它检查对象是否是特定值,或者是列表,元组或dicts的实例......

它提供了一种方法,如果所有这些都失败了该怎么做,并记录如何执行此操作:


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)

答案 1 :(得分:0)

从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__函数应该以{{1​​}}或类似的方式传递?只是一个想法。我可能会离开(可能是),但这至少是一个想法。