Как вставить в переменную в json строку?
Есть вот такая конструкция
newuser = {
"id": 1,
"settings": "{\"clients\": [{\"id\": \"bbfad557-28f2-47e5-9f3d-e3c7f532fbda\",\"flow\": \"xtls-rprx-vision\",\"email\": \"email_n\",\"limitIp\": 0,\"totalGB\": 0,\"expiryTime\": 0,\"enable\": true,\"tgId\": \"\",\"subId\": \"2rv0gb458kbfl532\",\"reset\": 0}]}"
}
Ее я передаю в API методом POST. Как мне вставить значение из переменной в эти данные? например у меня есть email_n=some_user_id, как мне вставить для значения email переменную? Пробовал и через
,\"email\": \'+email_n+'\",
и другими способами, описанными тут - ничего не работает.
Если в api отправить нормальный json в виде
newuser = {
"id": 1,
"settings": {
"clients": [{
"id": "bbfad557-28f2-47e5-9f3d-e3c7f532fbda",
"flow": "xtls-rprx-vision",
"email": {email_n},
"limitIp": 0,
"totalGB": 0,
"expiryTime": 0,
"enable": true,
"tgId": "",
"subId": "2rv0gb458kbfl532",
"reset": 0
}]
}
}
То API ничего не делает, ему нужны данные с этими спецсимволами, а когда используешь конструкцию с спецсимволами, то непонятно, как вставить переменную.
Ответы (2 шт):
Пробовали использовать f-строки?
>>> c = '[email protected]'
>>> a = f'{{\\"email_n\\{c}",\\"limitIp\\": 0,\\"totalGB\\": 0,\\"expiryTime\\}}"
>>> print(a)
{\"email_n\[email protected]",\"limitIp\": 0,\"totalGB\": 0,\"expiryTime\}"
Сначала формируете словарь для вставки в settings. email подставляйте просто как переменную. Потом сериализуете его в json-строку с помощью функции json.dumps
, и поставляете эту строку в settings
:
import json
...
settings = {
"clients": [{
"id": "bbfad557-28f2-47e5-9f3d-e3c7f532fbda",
"flow": "xtls-rprx-vision",
"email": email_n,
"limitIp": 0,
"totalGB": 0,
"expiryTime": 0,
"enable": true,
"tgId": "",
"subId": "2rv0gb458kbfl532",
"reset": 0
}]
}
newuser = {
"id": 1,
"settings": json.dumps(settings)
}