繁体   English   中英

在Python中过滤JSON字符串的最快方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM