Добавление переменных в полезную нагрузку API с помощью новых строк в Python

Я новичок в 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"
            }}
'''

Ваш вопрос связан с переводами строк (\n) или с помещением значений переменных (например, test_name) в строку полезных данных? Что вы ожидаете print(payload) на выходе?

Woodford 07.05.2024 18:57

Привет, я собираюсь распечатать полезную нагрузку с включенными переменными вверху.

Raymond 07.05.2024 18:59

Извините, я не ясно выразился. Пожалуйста, отредактируйте свой вопрос и введите именно ту строку вывода, которую вы ожидаете увидеть.

Woodford 07.05.2024 19:03

Отвечает ли это на ваш вопрос? Помещение переменной в строку (цитата)

Woodford 07.05.2024 19:06

Большое спасибо за ваш быстрый ответ. Я только что увидел пост, который вы предложили; Я знаю, как форматировать строки, а также как перебирать данные json, но в этом случае; единственное, что меня сбивает с толку, это новые строки в этом контексте

Raymond 07.05.2024 19:11

Я совершенно новичок во всем этом, но, насколько я понимаю и после небольшого исследования, я предполагаю, что мне следует преобразовать это значение полезной нагрузки в словарь JSON, обновить намеченные данные, а затем, возможно, переключить их обратно на исходную новую строку. форму с обновленными данными. Но я тоже не уверен, как этого добиться

Raymond 07.05.2024 19:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Полезная нагрузка имеет формат 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 07.05.2024 19:21

@Raymond Да, API не заботятся о пробелах вокруг значений.

Mark Tolonen 07.05.2024 19:23

@Raymond Я приведу пример загрузки существующей строки и обновления данных на месте.

Mark Tolonen 07.05.2024 19:25

Это было бы очень полезно @Mark.

Raymond 07.05.2024 19:27

Другие вопросы по теме