Введите JSON
{
"tables": {
"Cloc": {
"MINT": {
"CANDY": {
"Mob": [{
"loc": "AA",
"loc2": ["AAA"]
},
{
"loc": "AA",
"loc2": ["AAA"]
}
]
}
}
},
"T1": {
"MINT": {
"T2": {
"T3": [{
"loc": "AAA",
"loc2": ["AAA"]
}]
}
}
}
}
}
Ожидаемый результат
=========================================
Я попытался обработать этот вложенный JSON, используя pd.json_normalize().
data = pd.DataFrame(nested_json['tables']['Cloc']['MINT']['CANDY']['Mob'])
Я понятия не имею, как действовать, любая помощь или руководство высоко ценятся.
Большое спасибо!!
Добрый день Роман, спасибо за ответ! Да может быть больше loc3 и loc4 и т.д.!
Есть ли ограничения? в ключе CANDY может быть список словарей? или если мы подходим к списку, значит мы в самом "глубоком" словаре?






Предполагая, что только последний уровень состоит из списка словарей, вы можете просто вычислить строки. Мы могли бы сделать это рекурсивно, чтобы это работало для любого количества уровней вложенности.
rows = []
def find_rows(x, current_row):
if isinstance(x, dict):
for k,v in x.items():
find_rows(v, current_row+[k])
else: # we are at the final level, where we have a list of dictionaries
for locs_map in x:
for v in locs_map.values():
rows.append(current_row+[v])
find_rows(d['tables'], [])
# Now I'm assuming you have only the number of levels as in your example
data = pd.DataFrame.from_records(rows, columns= ['Tables', 'L_1', 'L_2', 'L_3', 'L_4'])
data = data.loc[data.astype(str).drop_duplicates().index]
могут ли быть
loc3и/илиloc4на уровне 4?