Python實現多維嵌套JSON、字典、列表、元組的JSON中獲取數據


背景:

  在跟其他產品對接過程中,對方傳過來的數據是JSON、字典、列表無限循環嵌套的格式。通過key一步一步取到對應值非常繁瑣,於是想到寫個取值的方法實現。當然,首先是去搜索了一番......果不其然,有個兄弟已經寫了一個非常貼近我需求的方法,感謝這位兄弟。原文鏈接為:https://www.cnblogs.com/Detector/p/8085460.html 

  但他的方法只能實現字典、列表、元組循環嵌套的格式中取值,而我的實際情況是JSON中還循環嵌套了JSON,於是在他的基礎做了一些修改實現了我想要的結果。

 

參考代碼:

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 
 4 import json
 5 
 6 def isjson(myjson):
 7     """判斷是否為json對象"""
 8     try:
 9         json_object = json.loads(myjson)
10     except Exception as e:
11         return False
12     return True
13 
14 
15 def get_target_value(key, dic, tmp_list):
16     """
17     :param key: 目標key值
18     :param dic: JSON數據
19     :param tmp_list: 用於存儲獲取的數據
20     :return: list
21     """
22     if not isinstance(dic, dict) or not isinstance(tmp_list, list):  # 對傳入數據進行格式校驗
23         return 'argv[1] not an dict or argv[-1] not an list '
24 
25     if key in dic.keys():
26         tmp_list.append(dic[key])  # 傳入數據存在則存入tmp_list
27     else:
28         for value in dic.values():  # 傳入數據不符合則對其value值進行遍歷
29             if isinstance(value, dict):
30                 get_target_value(key, value, tmp_list)  # 傳入數據的value值是字典,則直接調用自身
31             elif isinstance(value, (list, tuple)):
32                 _get_value(key, value, tmp_list)  # 傳入數據的value值是列表或者元組,則調用_get_value
33             elif isjson(value):
34                 value1 = json.loads(value)
35                 get_target_value(key, value1, tmp_list)  #傳入數據的value值是json字符串,則裝載成python對象,並調用自身
36     return tmp_list
37 
38 
39 def _get_value(key, val, tmp_list):
40     for val_ in val:
41         if isinstance(val_, dict):
42             get_target_value(key, val_, tmp_list)  # 傳入數據的value值是字典,則調用get_target_value
43         elif isinstance(val_, (list, tuple)):
44             _get_value(key, val_, tmp_list)   # 傳入數據的value值是列表或者元組,則調用自身
45         elif isjson(val_):
46             value2 = json.loads(val_)
47             get_target_value(key, value2, tmp_list)   #傳入數據的value值是json字符串,則裝載成python對象,並調用get_target_value

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM