以下是一个使用Python的代码示例,演示如何根据按键名过滤单个JSON:
import json
def filter_json_by_key(json_obj, key):
filtered_json = {}
if isinstance(json_obj, dict):
for k, v in json_obj.items():
if k == key:
filtered_json[k] = v
elif isinstance(v, (dict, list)):
filtered_v = filter_json_by_key(v, key)
if filtered_v:
filtered_json[k] = filtered_v
elif isinstance(json_obj, list):
filtered_json = [filter_json_by_key(item, key) for item in json_obj if filter_json_by_key(item, key)]
return filtered_json
# 示例 JSON 数据
json_data = '''
{
"name": "John",
"age": 30,
"city": "New York",
"skills": {
"programming": ["Python", "JavaScript", "Java"],
"database": ["MySQL", "MongoDB"]
}
}
'''
# 将 JSON 数据解析为字典
data = json.loads(json_data)
# 按键名过滤 JSON
filtered_data = filter_json_by_key(data, "skills")
# 打印过滤后的 JSON
print(json.dumps(filtered_data, indent=2))
运行以上代码,将过滤出包含键名为"skills"的部分,输出结果如下:
{
"skills": {
"programming": [
"Python",
"JavaScript",
"Java"
],
"database": [
"MySQL",
"MongoDB"
]
}
}
这个示例代码定义了一个名为filter_json_by_key
的递归函数,它接受两个参数:json_obj
表示要过滤的JSON对象,key
表示要过滤的键名。函数会遍历JSON对象的所有键值对,如果键名与指定的key相等,则将该键值对添加到filtered_json
中。如果该值是一个嵌套的字典或列表,函数会对该值进行递归调用,直到过滤完成。
注意,该代码示例假设输入的JSON数据是有效的,并且只过滤出第一个匹配的键名。如果需要过滤出多个匹配的键名,可以修改代码以返回一个列表。