Я хочу сгладить JSON, чтобы можно было получить значения столбцов, даже если это вложенный JSON.
Это файл JSON:
"columns": {
"id": {
"$type": "pyint"
},
"name": {
"firstname": {
"$type": "pystr",
"$props": {
"min_chars": 10,
"max_chars": 20
}
},
"lastname": {
"$type": "pystr",
"$props": {
"min_chars": 10,
"max_chars": 20
}
}
},
"price": {
"$type": "pyfloat",
"$props": {
"right_digits": 2,
"positive": true
}
}
}
Вывод должен быть таким:
{id:pyint , firstname:pystr , lastname:pystr , price:pyfloat}
Структура данных для хранения не имеет значения, пока сохраняется соответствие между элементами.






Вы можете использовать функцию, которая рекурсивно ищет ключ '$type' в подразделах:
def recurse(d):
for k, v in d.items():
if isinstance(v, dict):
if '$type' in v:
yield k, v['$type']
yield from recurse(v)
так что, если ваш объект JSON загружен в переменную d, dict(recurse(d)) вернет:
{'id': 'pyint', 'firstname': 'pystr', 'lastname': 'pystr', 'price': 'pyfloat'}
Это работает. Для python3 yield from recurse(v) необходимо заменить на for res в recurse(v): yield res
если вы хотите загрузить json в словарь, вы можете попробовать
json_data=open(file_path).read()data = json.loads(json_data)данные - это словарь, содержащий данные json