如何将Python字典序列化为字符串,然后返回字典?

2024-04-18 06:49:41 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

这取决于你想用它做什么。如果您只是想保存它,那么应该使用^{}(或者,如果您使用的是CPython 2.x,^{},速度更快)。

>>> 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'}

如果希望可读,可以使用^{}

>>> import json
>>> json.dumps({'foo': 'bar'})
'{"foo": "bar"}'
>>> json.loads(_)
{'foo': 'bar'}

但是,json在支持什么方面非常有限,而pickle可以用于任意对象(如果它不能自动工作,则类可以定义__getstate__,以精确指定应该如何对其进行pickle)。

>>> 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

如果完全信任字符串而不关心python injection attacks,那么这是非常简单的解决方案:

d = { 'method' : "eval", 'safe' : False, 'guarantees' : None }
s = str(d)
d2 = eval(s)
for k in d2:
    print k+"="+d2[k]

如果你更注重安全,那么^{}是一个更好的选择。

使用Python的json模块,如果没有Python 2.6或更高版本,则使用simplejson

相关问题 更多 >