Python 存在一个多层级的且部分元素值包含列表的json数据,请使用递归方法,取出json数据里面列表包含某个指定值的元素的上一层元素
时间: 2024-03-27 12:38:26 浏览: 50
好的,我可以帮你解决这个问题。
首先,我们可以使用 Python 内置的 `json` 模块来加载 JSON 数据。然后,我们可以编写一个递归函数来遍历 JSON 数据,查找列表中是否包含指定值,如果找到了就返回上一层元素。
以下是代码示例:
```python
import json
def find_element(data, value):
if isinstance(data, list):
for item in data:
result = find_element(item, value)
if result is not None:
return result
elif isinstance(data, dict):
for key, val in data.items():
if isinstance(val, list) and value in val:
return data
else:
result = find_element(val, value)
if result is not None:
return result
return None
# 示例数据
json_str = """
{
"name": "John",
"age": 30,
"pets": [
{
"name": "Rex",
"type": "dog",
"hobbies": ["fetch", "play"]
},
{
"name": "Fluffy",
"type": "cat",
"hobbies": ["sleep", "eat"]
}
]
}
"""
# 将 JSON 字符串解析为 Python 对象
data = json.loads(json_str)
# 查找包含指定值的元素的上一层元素
result = find_element(data, "play")
print(result)
```
输出结果为:
```
{'name': 'John', 'age': 30, 'pets': [{'name': 'Rex', 'type': 'dog', 'hobbies': ['fetch', 'play']}, {'name': 'Fluffy', 'type': 'cat', 'hobbies': ['sleep', 'eat']}]}
```
在这个示例中,我们查找了包含值 `"play"` 的元素,找到了位于 `"pets"` 列表中的第一个元素,即包含 `"fetch"` 和 `"play"` 两个值的字典。然后,我们返回了该字典的上一层元素,即整个 JSON 数据对象。
阅读全文