使用python獲取json的所有父結點和子節點 并使用父節點加下劃線命名子節點
先展示一段json代碼
{"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_2": "2_2value","level2_3": "2_3value"},"level1_2": [{"level2_4": "2_4value","level2_5": "2_5value"},{"level3_2": "3_2value"}]
}
上面就是這次測試的json數據 因為時間問題只寫了最多4層結構
按照解析下來應該是 相應的節點為父節點、父節點+‘_’+子節點
直接上代碼
import jsonclass returnJsonNode():def __init__(self):self.datas = {}def ergodic_data(self, data: dict, result=""):# 檢測數據類型:字典類型if isinstance(data, dict):for k, v in data.items():if result == "":self.ergodic_data(v, k)else:self.ergodic_data(v, result + '.' + f'{k}')# 檢測是否為列表或元組# 元組和列表類型差不多放到一起處理elif isinstance(data, (list, tuple)):if len(data) == 1:for i in range(len(data)):self.ergodic_data(data[i], result)else:for i in range(len(data)):self.ergodic_data(data[i], result)else:self.datas[result] = str(data)return list(self.datas.keys())with open(r'D:\zsh\Program\alls\Lucy\test\test.json') as f:datas = f.read()
keys = returnJsonNode().ergodic_data(data=json.loads(datas),result="")
print(keys)
因為json里面命名是_的 所以我這里用’.'代替的 可以更換成下劃線
運行如下
有很多可以進行轉換 這里因為是直接取出來不加任何其他處理 如果是要和python 進行jsonpath取數 可更換里面參數 如下
方法有很多 之前那篇文章 函數沒有寫完 所以導致不能完全取出來 json node,這篇文章
后續我會寫成工具 包含分解成有層級的表或者Excel 如果有更好的方法 歡迎提出