[英]Fastest way to filter json string in Python
我有一个像这样的json结构
{
"a": "1",
"b": "2",
"c": {
"d": "3"
}
}
我想要的是仅保留json的第一级,即如果第一级的值不是字符串,则删除它,因此我有一个类似
import json
s = ''' {
"a": "1",
"b": "2",
"c": {
"d": "3"
} } '''
data = json.loads(s)
ret = {}
for k, v in data.items():
if (isinstance(v, basestring)):
ret[k] = v
print json.dumps(ret)
由于我需要像这样处理大量的json字符串,因此我在寻找是否有最快的方法或更优雅的方法在Python中做同样的事情
使用字典理解:
ret = {k: v for k, v in json.loads(s).iteritems() if isinstance(v, basestring)}
此处的dict.iteritems()
调用会阻止首先构建完整列表。
如果您的JSON输入确实很大,请考虑切换到类似ijson
这样的迭代JSON解析器,并使用事件驱动的接口解析JSON:
import ijson
ret = {}
key = None
with open(some_large_jsonfile) as json_file:
for prefix, type, value in ijson.parse(json_file):
if prefix and not '.' in prefix and type == 'string':
# only top-level string values
ret[prefix] = value
但是最好在此处处理键值对,然后再构建完整的字典,这是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.