как добавить дополнительный ключ, значение к ответу на запрос в python - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно добавить дополнительный ключ, значение к ответу в requests lib из python3 без изменения структуры ответа (потому что ответ будет отправлен в другой сервис для процесса). например, я получил этот ответ:

>>import requests
>>r = requests.post(url=input_kong_address, data=data)
>>print(r.json())
{
    "foo":"bar",
    "key1":"val1"
}

Мне нужно добавить "extra_key":"extra_value" к ответу:

{
    "foo":"bar",
    "key1":"val1",
    "extra_key":"extra_value"
}

, и теперь я хочу добавить дополнительный ключ к ответу и отправил его к следующему сервису без изменения структуры (класс, тип и т. д. c):

>>import requests
>>import json
>>r = requests.post(url=input_kong_address, data=data)
>>response_data = r.json()
>>response_data['extra_key']='extra_value'  # trying to add extra key and value to response
>>r.json = json.loads(json.dumps(response_data))  #  trying to attach new dict to response
>>r.json() # check is worked?
{TypeError}'dict' object is not callable

спасибо.

1 Ответ

1 голос
/ 30 марта 2020

response.json() - это метод, поэтому его привязка к диктату может привести только к такому поведению. Теперь, если вы прочитаете источник класса ответа , вы обнаружите, что этот метод фактически работает с атрибутом ._content (доступ к которому осуществляется через свойства .content и / или .text). IOW, вам просто нужно присвоить вашу сериализованную строку json на response._content:

>>> import requests
>>> import json
>>> r = requests.get("https://www.google.com")
>>> r._content = json.dumps({"foo": "bar"})
>>> r.json()
{u'foo': u'bar'}
>>> 

При этом:

ответ будет отправлен в другую службу для process

Вы можете подумать дважды о своем дизайне. Конечно, невозможно сказать, не зная намного больше о вашем конкретном случае использования, но спросите себя, действительно ли этому «другому сервису» нужен весь объект ответа.

...