这取决于您要使用它的目的。如果只是尝试保存它,则应使用pickle
(或者,如果使用cpython 2.x,cPickle
则速度更快)。
>>> import pickle
>>> pickle.dumps({'foo': 'bar'})
b'\x80\x03}q\x00X\x03\x00\x00\x00fooq\x01X\x03\x00\x00\x00barq\x02s.'
>>> pickle.loads(_)
{'foo': 'bar'}
如果您希望它可读,可以使用json
:
>>> import json
>>> json.dumps({'foo': 'bar'})
'{"foo": "bar"}'
>>> json.loads(_)
{'foo': 'bar'}
json
但是,它支持的功能非常有限,虽然pickle
可以用于任意对象(如果它不能自动运行,则该类可以定义__getstate__
以精确指定应如何对其进行腌制)。
>>> pickle.dumps(object())
b'\x80\x03cbuiltins\nobject\nq\x00)\x81q\x01.'
>>> json.dumps(object())
Traceback (most recent call last):
...
TypeError: <object object at 0x7fa0348230c0> is not JSON serializable