Я новичок в Python, и я пытаюсь добавить переменные к приведенной ниже полезной нагрузке в Python; он предназначен для API Zeptomail, и я пытаюсь настроить и добавить специфичные для пользователя данные в «информацию о слиянии» полезных данных и заголовок «кому» перед отправкой шаблона электронной почты.
пример.py
test_name = 'users name'
test_email = '[email protected]'
test_title = 'users title'
payload = '''
{
\n\"mail_template_key\":\"xxxxxxxxxxxxxxxxxxxxxxxxx\",
\n\"from\": {
\"address\": \"[email protected]\",
\"name\": \"example\"
},
\n\"to\": [{
\"email-address\": {
\"address\": \"test_email\",
\"name\": \"test_name\"
}
}],
\n\"merge_info\": {
"name":"test_name",
"title":"test_title"
}}
'''
Я собираюсь распечатать новую переменную полезной нагрузки с включенными в нее специфичными для пользователя значениями «test_».
ожидаемая печать(),
payload = '''
{
\n\"mail_template_key\":\"xxxxxxxxxxxxxxxxxxxxxxxxx\",
\n\"from\": {
\"address\": \"[email protected]\",
\"name\": \"example\"
},
\n\"to\": [{
\"email-address\": {
\"address\": \"[email protected]\",
\"name\": \"users name\"
}
}],
\n\"merge_info\": {
"name":"users name",
"title":"users title"
}}
'''
Привет, я собираюсь распечатать полезную нагрузку с включенными переменными вверху.
Извините, я не ясно выразился. Пожалуйста, отредактируйте свой вопрос и введите именно ту строку вывода, которую вы ожидаете увидеть.
Отвечает ли это на ваш вопрос? Помещение переменной в строку (цитата)
Большое спасибо за ваш быстрый ответ. Я только что увидел пост, который вы предложили; Я знаю, как форматировать строки, а также как перебирать данные json, но в этом случае; единственное, что меня сбивает с толку, это новые строки в этом контексте
Я совершенно новичок во всем этом, но, насколько я понимаю и после небольшого исследования, я предполагаю, что мне следует преобразовать это значение полезной нагрузки в словарь JSON, обновить намеченные данные, а затем, возможно, переключить их обратно на исходную новую строку. форму с обновленными данными. Но я тоже не уверен, как этого добиться
Полезная нагрузка имеет формат JSON, поэтому просто создайте объект Python из диктовок/списков, а затем преобразуйте его в строку JSON:
import json
test_name = 'users name'
test_email = '[email protected]'
test_title = 'users title'
data = {'mail_template_key': 'xxxxxxxxxxxxxxxxxxxxxxxxx',
'from': {'address': '[email protected]',
'name': 'example'},
'to': [{'email-address': {'address': test_email,
'name': test_name}}],
'merge_info': {'name': test_name,
'title': test_title}}
payload = json.dumps(data, indent=2) # indent for pretty-printing, an API doesn't need it.
print(payload)
Выход:
{
"mail_template_key": "xxxxxxxxxxxxxxxxxxxxxxxxx",
"from": {
"address": "[email protected]",
"name": "example"
},
"to": [
{
"email-address": {
"address": "[email protected]",
"name": "users name"
}
}
],
"merge_info": {
"name": "users name",
"title": "users title"
}
}
Если вам нужно обновить существующую строку полезных данных, преобразуйте ее из JSON, исправьте поля и преобразуйте обратно в JSON:
import json
test_name = 'users name'
test_email = '[email protected]'
test_title = 'users title'
payload = '''
{
\n\"mail_template_key\":\"xxxxxxxxxxxxxxxxxxxxxxxxx\",
\n\"from\": {
\"address\": \"[email protected]\",
\"name\": \"example\"
},
\n\"to\": [{
\"email-address\": {
\"address\": \"[email protected]\",
\"name\": \"users name\"
}
}],
\n\"merge_info\": {
"name":"users name",
"title":"users title"
}}
'''
data = json.loads(payload)
data['to'][0]['email-address']['address'] = test_email
data['to'][0]['email-address']['name'] = test_name
data['merge_info']['name'] = test_name
data['merge_info']['title'] = test_title
payload = json.dumps(data, indent=2)
print(payload) # same output as above
Большое спасибо. Будет ли это работать даже без новых строк, как вы проиллюстрировали?
@Raymond Да, API не заботятся о пробелах вокруг значений.
@Raymond Я приведу пример загрузки существующей строки и обновления данных на месте.
Это было бы очень полезно @Mark.
Ваш вопрос связан с переводами строк (
\n
) или с помещением значений переменных (например,test_name
) в строку полезных данных? Что вы ожидаетеprint(payload)
на выходе?