輸入json串,返回字典,字典值僅包括json最底層數據

需求:輸入如下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只返回第一次知足條件的結果,會出現其他的沒有返回的問題。

相關文章
相關標籤/搜索