不能json转储带有id键的python字典

时间:2013-08-06 23:32:30

标签: python json dump

json.dump({'id' : '3'})

  File "/Library/Python/2.7/site-packages/simplejson/__init__.py", line 354, in dumps
    return _default_encoder.encode(obj)
  File "/Library/Python/2.7/site-packages/simplejson/encoder.py", line 262, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Library/Python/2.7/site-packages/simplejson/encoder.py", line 340, in iterencode
    return _iterencode(o, 0)
  File "/Library/Python/2.7/site-packages/simplejson/encoder.py", line 239, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: ObjectId('520183b519744a0ca3d36003') is not JSON serializable

有什么问题?

2 个答案:

答案 0 :(得分:2)

尝试使用标准的json库和dumps代替。

有了这个改变,它对我来说很好。

>>> import json
>>> json.dumps({'id' : '3'})
'{"id": "3"}'

答案 1 :(得分:0)

你应该说明你使用的是simplejson库,而不是默认的json模块。我假设你有import simplejson as json之类的东西?如果其他人要查看此代码,这是一个值得怀疑的决定,因为没有人期望json能够引用simplejson。 (使用simplejson没有错,只是不要将它作为json导入。)

您的代码中的错误不会被您在顶部的示例抛出,例如:

>>> import simplejson as json
>>> json.dump({ 'id' : '3' })
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: dump() takes at least 2 arguments (1 given)

您在问题中显示的错误可能是因为您尝试从未序列化的对象创建JSON数据结构。我们需要看到你的对象,看看真正失败的是什么,并提供更好的解决方案。

例如:

>>> class demoObj:
...   def __init__(self):
...     self.a = '1'
...
>>> testObj = demoObj()
>>> json.dumps(testObj)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <__main__.demoObj instance at 0xe5b7a0> is not JSON serializable

请注意,此处的错误与您的错误相同(对象的引用除外)。

要序列化我的testObj,我基本上需要能够从中获取字典。在这些问题中可以看到一些参考文献: