gpt4 book ai didi

python - 从复杂的 JSON 文件中提取信息的最有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:01 25 4
gpt4 key购买 nike

我是 Python 的新手,正在研究从 dict 文件中提取某些信息。

我有数百万个存储文本数据的 JSON 文件。所有 JSON 文件都具有相似的结构。在结构方面有很多变化。对于每个 JSON 文件,我想从特定键中提取所有文本字符串并将它们存储为字典。

下面的

json1json2 是简化的示例。我一直在做的是从 JSON 文件中提取样本,对其进行分析,编写大量 if 语句以尝试包含所有可能的变体。但是,我发现它效率低下并且仍然无法包含所有场景。我想知道是否有一种通用的方法可以使用键 "text" 搜索和提取值。

json1 = {
"section": {
"heading":{"lvl":"A1", "text":"today"},
"paragraph":[
{"color":"green", "text":"yesterday"},
{"color":"purple", "text":"tomorrow"}
]
}
}

json2 = {
"paragraph":{"text":"everyday", "color": "black"}
}

换句话说,我想得到一个包含所有文本字符串的字典,键为“文本”。对于json1,我想获取{"json1":"today yesterday tomorrow"}。对于 json2,我想获取 {"json2":"everyday"}

非常感谢任何帮助。

最佳答案

如果您什么都不知道,并且结构可能像您暗示的那样相当随意,那么您必须访问每个节点并进行检查。这可以使用递归以通用方式实现。这是一个实现它的快速而简单的函数:

In [4]: def extract_text(obj, acc):
...: if isinstance(obj, dict):
...: for k, v in obj.items():
...: if isinstance(v, (dict, list)):
...: extract_text(v, acc)
...: elif k == "text":
...: acc.append(v)
...: elif isinstance(obj, list):
...: for item in obj:
...: extract_text(item, acc)
...:

以下是您将如何使用它:

In [5]: acc1 = []

In [6]: extract_text(json1, acc1)

In [7]: acc1
Out[7]: ['yesterday', 'tomorrow', 'today']

In [8]: acc2 = []

In [9]: extract_text(json2, acc2)

In [10]: acc2
Out[10]: ['everyday']

请注意,您的问题实际上与 JSON 没有任何关系,JSON 是一种基于文本的数据序列化格式。您已经在处理反序列化数据和 Python 数据结构。无论如何,如果您真的想要问题中的结果,您只需执行以下操作:

In [11]: {"json1": ",".join(acc1)}
Out[11]: {'json1': 'yesterday,tomorrow,today'}

或者任何你喜欢加入的分隔符,比如一个简单的空格:

In [12]: {"json1": " ".join(acc1)}
Out[12]: {'json1': 'yesterday tomorrow today'}

关于python - 从复杂的 JSON 文件中提取信息的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com