我正在尝试使用ijson
而不是json
能够有效地将字典转储/加载到字符串(在内存中,而不是从文件中)[1]。
是否有任何ijson
类似于标准倾倒/加载的示例json
?我见过的所有使用的资源ijson
都只有文件示例。
[1] -- 字典被转换为字符串以便将它们存储在一个集合中
为了在性能方面补充 omri_saadon 的答案,
这是一个链接(序列化程序速度比较),它测量了一些鲜为人知的 JSON 模块,其中一个被发现有效地优于其他模块(msgpack
)并且可以与json
.
因此,目前使用 dict/str 转换代替ijson
or 标准。json
msgpack
安装:
pip install msgpack
要使用:
import msgpack as json
# can use dumps/loads functions
您可以达到两个目标(字典到字符串和字符串到字典,而不使用 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 编码字符串。
编辑:
经过进一步调查并遵循这个 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'>