type
status
date
slug
summary
tags
category
icon
password
网上查到的方案只能处理简单的json数据,根据某方案做的改良,主要是增加了value是json字符串的逻辑。
既然是递归,那就会一直查询下去,若存在重复key,value会被不断刷新,以最后一次为准,故需要取重复key值的情况不适用。
import json #配合extract_keys判断value是json字符串的情况,一般是深层嵌套的json def is_json(myjson): try: json.loads(myjson) except ValueError: return False return True #递归查询主逻辑 def extract_keys(data, keys_to_extract): extracted_data = {} if isinstance(data, dict): for key, value in data.items(): if key in keys_to_extract: extracted_data[key] = value elif isinstance(value, (dict,list)): nested_data = extract_keys(value, keys_to_extract) extracted_data.update(nested_data) elif isinstance(value, (str)): #复杂的嵌套用得上,简单的json可以删除 if is_json(value): str_tmp = json.loads(value) nested_data = extract_keys(str_tmp, keys_to_extract) extracted_data.update(nested_data) elif isinstance(data, list): for item in data: nested_data = extract_keys(item, keys_to_extract) extracted_data.update(nested_data) return extracted_data