如何使用Python有选择性地打印出JSON项目



我编写了一个应用程序,可以帮助我搜索巨型JSON文件(数据库转储(。JSON文件被加载为字典列表:

    with open ('myDB.json', 'r', encoding="utf-8") as file:
                    myDB = json.load(file)

MyDB的当前结构是这样的:

    [
    {
    "object":"myobject",
    "key1":"value1",
    "key2":"value2",
    "key3":"value3",
    }
    {
    "object":"myobject",
    "key1":"value1",
    "key2":"value2",
    "key3":"value3",
    }
    ]

有些值是列表,有些值是其他字典,有些只是常规值。

目前我通过使用以下方式打印出来的问题:

    for i in queryResults:
                print(json.dumps(i, indent = 3))

...但是可悲的是,每个项目中都有太多的钥匙,以至于屏幕上需要太多空间,并且使其不可读。更糟糕的是,我不需要所有这些。我想做的是选择性地删除某些键:value 对印刷结果对,因此在我的示例中,让我们仅说 object and key2 将被打印。

我对我需要的密钥打印(或列出列表(不感兴趣。这样做的太多了,更不用说实际需求可能会改变。相比之下,只有少数键:value 我要删除。我希望要删除键的列表,该键将在打印结果时使用,从而过滤实际打印的内容。

Pythonic单线非常欢迎。

奖励问题:我主要在寻找一种删除顶级键的方法:value 对每个项目,但出于完整的知识,我会很高兴也知道如何删除键:value 对某些顶级键的值的二十对。

first:使用pprint库,它是为此制作的。

否则,直接的解决方案将是过滤dict,然后将其漂亮打印。这样的东西适用于顶级钥匙删除

filtered_results = [{k:v for k, v in elem.items() if k not in keys_to_remove} for elem in query_results]

,要获得较低的级别,您可能需要做一些递归的事情,例如

def filter_results(results, keys_to_remove):
    if isinstance(results, list):
        return [filter_results(item) for item in list]
    elif isinstance(results, dict):
        return {k:filter_results(v) for k,v in results.items() if k not in keys_to_remove}
    else:
        return results
...
filtered_results = filter_results(query_results)

之后,您可以在闲暇时进行打印

import pprint
...
pprint.pprint(filtered_results)

相关内容

  • 没有找到相关文章

最新更新