2

我正在尝试使用ijson而不是json能够有效地将字典转储/加载到字符串(在内存中,而不是从文件中)[1]。

是否有任何ijson类似于标准倾倒/加载的示例json?我见过的所有使用的资源ijson都只有文件示例。

[1] -- 字典被转换为字符串以便将它们存储在一个集合中

4

2 回答 2

1

为了在性能方面补充 omri_saadon 的答案,

这是一个链接(序列化程序速度比较),它测量了一些鲜为人知的 JSON 模块,其中一个被发现有效地优于其他模块(msgpack)并且可以与json.

因此,目前使用 dict/str 转换代替ijsonor 标准。jsonmsgpack

安装: pip install msgpack

要使用: import msgpack as json # can use dumps/loads functions

于 2017-07-05T08:16:27.847 回答
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 你可以使用astlib.

您可以阅读有关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'>
于 2017-07-05T07:05:13.077 回答