我有一個 json 檔案可以將其轉換為 json 但這里的情況是嵌套的 json 結構:
[ { "node":[ { "node":[ { "node":[ { "node":[ { "valBool":false, "valStr1":[ "true" ], "valStr2":[ "行業是在銀行排除串列中" ] }, { "valBool":false, "valStr1":[ "true" ], "valStr2":[ "借款人目前處于破產法中" ] }, { "valBool":false, "valStr1 ":[ "true" ], "valStr2":[ "借款人被標記為不愿意" ] }, { "valBool":false, "valStr1":[ "true" ], "valStr2":[ "借款人被標記為non-viable" ] }, { "valBool":false, "valStr1":[ "true" ], "valStr2":[ "借款人已阻止銀行訪問 Tiresias" ] }, { "valBool":false,"valStr1":[ "true" ], "valStr2":[ "借款人是默認的 (NPE/NPF eba 狀態)" ] }, { "valBool":true, "valStr1":[ "false" ], "valStr2" :[ "默認值" ] } ] } ] }, { "node":[ { "node":[ { "node":[ { "node":[ { "node":[ { "valBool":false, "valStr1":[ "1" ], "valStr2":[ "雇員少于 10 人" ] }, { "valBool":false, "valStr1":[ "1" ], "valStr2":[ "年營業額\n低于年\n營業額閾值" ] }, { "valBool":false, "valStr1":[ "1" ], "valStr2":[ "總資產\n低于總\n資產閾值"] } , { "valBool":true,"valStr1":["0"], "valStr2":["默認"] } ] } ] } ] } ] } ] } ] } ] } ]
如您所見,可以在任何級別找到“節點”。我嘗試了一些遞回方法,但輸出不是我們想要的。我們需要獲取每個內部包含三個值的節點并將它們寫入 csv 的一行。
預期的輸出應該是:
valBool,valStr1,valStr2
false,"true","Industry is in bank exclusion list"
false,"true","Borrower is currently under bankruptcy law"
我已經嘗試過了,但是輸出只是將每個值附加到新行中,將整個路徑寫在鍵上。
有任何想法嗎?
謝謝!
uj5u.com熱心網友回復:
如果您正在處理的資料是串列或字典,您必須在遞回函式中考慮。如果它是一個串列,您只需在其專案上反復呼叫您的函式。如果它是一個字典,則您嘗試列印與 關聯的值,'valBool'如果它們存在并遞回呼叫與關聯的值(
如果有)。'valStr1''valStr2''node'
data = [ { "node":[ { "node":[ { "node":[ { "node":[ { "valBool":False, "valStr1":[ "true" ], "valStr2":[ "Industry is in bank exclusion list" ] }, { "valBool":False, "valStr1":[ "true" ], "valStr2":[ "Borrower is currently under bankruptcy law" ] }, { "valBool": False, "valStr1":[ "true" ], "valStr2":[ "Borrower is flagged as Unwilling" ] }, { "valBool": False, "valStr1":[ "true" ], "valStr2":[ "Borrower is flagged as non-viable" ] }, { "valBool": False, "valStr1":[ "true" ], "valStr2":[ "Borrower has blocked access of bank to Tiresias" ] }, { "valBool":False, "valStr1":[ "true" ], "valStr2":[ "Borrower is default (NPE/NPF eba status) " ] }, { "valBool":True, "valStr1":[ "false" ], "valStr2":[ "Default value" ] } ] } ] }, { "node":[ { "node":[ { "node":[ { "node":[ { "node":[ { "valBool":False, "valStr1":[ "1" ], "valStr2":[ "There are less \nthan 10 employees" ] }, { "valBool":False, "valStr1":[ "1" ], "valStr2":[ "Annual turnover is \nlower than annual \nturnover threshold" ] }, { "valBool":False, "valStr1":[ "1" ], "valStr2":[ "Total assets are \nlower than total \nassets threshold" ] }, { "valBool":True, "valStr1":[ "0" ], "valStr2":[ "Default" ] } ] } ] } ] } ] } ] } ] } ] } ]
result = list()
def loop(data):
if isinstance(data, list):
for item in data: # data is a list => recursive call on all its items
loop(item)
elif isinstance(data, dict): # data is a dictionary
try:
row = f"{data['valBool']};{data['valStr1'][0]};{data['valStr2'][0]}"
print(row)
result.append(row)
except KeyError: # dictionary does not have all valXXX keys
pass
if 'node' in data: # recursive call if the dictionary has a "node" key
loop(data['node'])
print('valBool;valStr1;valStr2')
loop(data)
這并不完全是您期望的輸出,但您會弄清楚如何修改它。
[編輯] 修改代碼以將行放入串列result
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441868.html
