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

时间:2014-05-05 14:58:32

标签: python json python-2.7

我有像

这样的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中做同样的事情

1 个答案:

答案 0 :(得分:4)

使用词典理解:

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

但是在那里处理键值对然后而不是建立一个完整的字典可能是一个好主意。