Собрать json из разных словарей(Python)
Как собрать json из таких вводных. Сейчас я получаю основные данные в формате словаря:
{'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}
И контактные данные в таком формате:
{'lastname_1': 'Петров', 'firstname_1': 'Иван', 'middelname_1': 'Сергеевич', 'phone_1': '79680949999', 'relation': '3'}
Контактные данные из группы contacts могут быть динамическими, то есть может быть больше или меньше контактов.
Пример, как должно получиться:
{
external_id: '1234qwer',
external_meta: {
amount: 44342,
period: 33,
lastname: 'Иванов',
firstname: 'Иван',
middlename: 'Иванович',
phone: '79998884444',
birthdate: '25.08.1999',
city: 'Киев'
},
contacts: [{
lastname: 'Петров',
firstname: 'Иван',
middlename: 'Сергеевич',
phone: '79680949999',
relation: 3,
}, {
lastname: 'Бородач',
firstname: 'Елена',
middlename: 'Родионовна',
phone: '79034564444',
relation: 1,
}]
}
Второй дополнительный контакт(Бородач Елена Родионовна) необязательный, нужно сделать как-то проверку в цикле
Ответы (2 шт):
Автор решения: nomnoms12
→ Ссылка
Для преобразования словаря в JSON можно воспользоваться функцией json.dumps.
Но перед этим нужно собрать его из двух других. Сделать это можно множеством способов. Например:
import json
data = {'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}
contact = {'lastname_1': 'Петров', 'firstname_1': 'Иван', 'middelname_1': 'Сергеевич', 'phone_1': '79680949999', 'relation': '3'}
external_meta = {
'amount': data['amount'],
'period': data['period'],
'lastname': data['lastname'],
'firstname': data['firstname'],
'middlename': data['middelname'],
'phone': data['phone'],
'birthdate': data['birthdate'],
'city': data['city'],
}
contacts = [{
'lastname': contact['lastname_1'],
'firstname': contact['firstname_1'],
'middlename': contact['middelname_1'],
'phone': contact['phone_1'],
'relation': int(contact['relation']),
}]
result = json.dumps({
'external_id': '1234qwer',
'external_meta': external_meta,
'contacts': contacts,
})
result:
{
"external_id": "1234qwer",
"external_meta": {
"amount": 44342,
"period": 33,
"lastname": "Иванов",
"firstname": "Иван",
"middlename": "Иванович",
"phone": "79998884444",
"birthdate": "25.08.1999",
"city": "Киев"
},
"contacts": [{
"lastname": "Петров",
"firstname": "Иван",
"middlename": "Сергеевич",
"phone": "79680949999",
"relation": 3
}]
}
Автор решения: solovey1
→ Ссылка
Пока придумал сделать так:
form = {'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}
form2 = {'lastname': 'Петров', 'firstname': 'Иван', 'middelname': 'Сергеевич', 'phone': '79680949999', 'relation': 3}
form3 = {'lastname': '', 'firstname': '', 'middelname': '', 'phone': '', 'relation': ''}
form4 = {'lastname': '', 'firstname': '', 'middelname': '', 'phone': '', 'relation': ''}
request_data = {}
request_data['external_id'] = 325614
request_data['external_meta'] = {}
request_data['contacts'] = {}
request_data['external_meta'] = form_data
if form4_data['lastname'].isalpha() :
request_data['contacts'] = form2_data, form3_data,form4_data
elif form3_data['lastname'].isalpha():
request_data['contacts'] = form2_data, form3_data
else:
request_data['contacts'] = form2_data
request_json = json.dumps(request_data)