【发布时间】:2017-12-08 16:42:39
【问题描述】:
我正在尝试使用 ijson 而不是 json 来高效地将字典转储/加载到字符串(在内存中,而不是从文件中)[1]。
是否有任何ijson 的示例类似于使用json 进行标准转储/加载?我见过的所有使用ijson 的来源都只有文件示例。
[1] -- 将字典转换为字符串以便将它们存储在集合中
【问题讨论】:
我正在尝试使用 ijson 而不是 json 来高效地将字典转储/加载到字符串(在内存中,而不是从文件中)[1]。
是否有任何ijson 的示例类似于使用json 进行标准转储/加载?我见过的所有使用ijson 的来源都只有文件示例。
[1] -- 将字典转换为字符串以便将它们存储在集合中
【问题讨论】:
您可以同时达到两个目标(字典到字符串和字符串到字典,而无需使用 json 库)。
我们看上面的例子:
import ast
di = {"a":2, "b": 3}
print (str(di))
>>> "{'a': 2, 'b': 3}"
print (type(str(di)))
>>> <class 'str'>
print (ast.literal_eval(str(di)))
>>> {'a': 2, 'b': 3}
print (type(ast.literal_eval(str(di))))
>>> <class 'dict'>
你有一个字典,为了把它变成字符串,你只需要把它转换成str。
如果你想将 str 返回到 dict 你可以使用ast lib。
你可以阅读更多关于ast.literal_eval的信息
ast.literal_eval(node_or_string)
安全地评估表达式节点或包含 Python 文字或容器显示的 Unicode 或 Latin-1 编码字符串。
编辑:
经过进一步调查并关注this SO question 似乎使用 json 可以让您获得更快的结果(性能)。
查看附加链接上的 abarnert 答案,特别是:
为什么 json.loads 这么快?
因为 Python 文字语法是 比 JSON 更复杂、更强大的语言,它可能会更慢 解析。而且,可能更重要的是,因为 Python 字面量 语法不打算用作数据交换格式(在 事实上,它特别不应该用于那个),没有人是 可能会付出很多努力来加快数据交换速度。
import json
di = {"a":2, "b": 3}
print (json.dumps(di))
>>> '{"a": 2, "b": 3}'
print (type(json.dumps(di)))
>>> <class 'str'>
print (json.loads(json.dumps(di)))
>>> {'a': 2, 'b': 3}
print (type(json.loads(json.dumps(di))))
>>> <class 'dict'>
【讨论】:
为了在性能方面补充 omri_saadon 的回答,
这是一个链接 (serializer speed comparisons),用于衡量一些鲜为人知的 JSON 模块,其中一个被发现有效地优于其他 (msgpack),并且可以与 json 互换使用。
因此,msgpack 目前用于 dict/str 转换,而不是 ijson 或标准 json。
要安装:
pip install msgpack
使用:
import msgpack as json# can use dumps/loads functions
【讨论】: