我正在尝试使用ijson
代替json
,以便能够有效地将字典转储/加载到字符串(内存中,而不是文件中)[1]。
ijson
是否有类似标准转储/加载json
的示例?我见过的所有使用ijson
的资源都只包含文件示例。
[1] - 字典正在转换为字符串,以便将它们存储在集合
中答案 0 :(得分:1)
你可以达到这两个目标(dict to string和string to dict而不使用json lib)。
让我们看一下上面的例子:
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文字 语法不能用作数据交换格式(in 事实上,它不应该被用于那个),没有人 可能会花费很多精力来快速进行数据交换。
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'>
答案 1 :(得分:1)
以表现的方式补充omri_saadon的答案,
这是一个链接(serializer speed comparisons),用于衡量一些鲜为人知的JSON模块,其中一个被发现有效地胜过其他模块(msgpack
),可以与json
互换使用
因此,ijson
代替json
或标准msgpack
,目前正用于dict / str转换。
安装:
pip install msgpack
使用:
import msgpack as json
# can use dumps/loads functions