需求:输入如下json串,返回字典,字典值仅包括json最底层数据
输入:my_dict = {
"name":"alien",
"country":"china",
"other":{
"age":"18",
"gender":"man"
},
"school":"HLW"
}
输出:{'country': 'china', 'school': 'HLW', 'age': '18', 'name': 'alien', 'gender': 'man'}
一、 背景知识json
1)item(),遍历字典优化
2)isinstance(),判断对象的变量类型spa
二、思路code
获取json中key和value值,判断若是value是否是字典类型,则循环递归获取key和value值对象
三、获取json最底层数据(一)blog
def read_json_only1(dict_str): dict_result = {} for k,v in dict_str.items(): if isinstance(v,dict): #判断若是value是字典类型,则提取字典中的key和value for k2,v2 in v.items(): dict_result[k2]=v2 else: dict_result[k] = v print dict_result if __name__ == '__main__': read_json_only1(my_dict)
输入:递归
my_dict = {
"name":"alien",
"country":"china",
"other":{
"age":"18",
"gender":"man"
},
"school":"HLW"
}
输出:{'country': 'china', 'school': 'HLW', 'age': '18', 'name': 'alien', 'gender': 'man'}it
四、发现上面方法只能知足只有一到两层的状况,若是两层下面的value 仍是字典,就无法获取到,因而打个问号,可否用递归方法实现for循环
如:输入串为class
my_dict = {
"name":"alien",
"country":"china",
"other":{
"age":"18",
"gender":"man",
"other":{
"address":"beijing",
"phone":"13800138000"
}
},
"school":"HLW"
}
输出结果为:{'school': 'HLW', 'name': 'alien', 'country': 'china', 'age': '18', 'other': {'phone': '13800138000', 'address': 'beijing'}, 'gender': 'man'}
五、优化,使用递归获取获取json最底层数据(二)
dict_result = {} def read_json_only(dict_str): for k,v in dict_str.items(): if isinstance(v, dict): read_json_only(v) else: dict_result[k] = v return dict_result if __name__ == '__main__': print read_json_only(my_dict)
输出:{'school': 'HLW', 'name': 'alien', 'country': 'china', 'age': '18', 'phone': '13800138000', 'gender': 'man', 'address': 'beijing'}
注意,for循环过程return只返回第一次知足条件的结果,会出现其他的没有返回的问题。