0
0 комментариев

Многие api работают через запросы с отправкой и приёмом json, а реляционные БД с кортежами. Подскажите как json перевести в именованный tuple и обратно. Например такой (из wiki):

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

Up1. Вложенные структуры образуют имя «address.city», списки значений кортежи («812 123-1234», «916 123-4567»).

Up2. Сложность возникла при рекурсивном анализе вложенных структур. Плюс
по мелочи: использовать type() или isinstance() и пр.

Up3. Непосредственная сложность на примере кода:

json = {"firstName": "Иван",
    "lastName": "Иванов", "address":
    {"streetAddress": "Московское ш., 101, кв.101","city":
    "Ленинград", "postalCode": 101101},
    "phoneNumbers": ["812 123-1234","916 123-4567"]}
 
def json_to_tuple(json_):
    output = []
    for el in json_:
        output += json_to_tuple(json_[el]) if isinstance(json_[el], dict)
                  else [(el, json_[el])]
    return output
print json_to_tuple(json)

Всё извлечь такой код поможет, но как сохранить имена родителей в цепочку аля «address.city»

Up4. А зачем вообще цепочка через точку? Для запросов в MongoDB и не только.


Добавить комментарий