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
有什么问题?
答案 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,我基本上需要能够从中获取字典。在这些问题中可以看到一些参考文献: