mehdi
mehdi

Reputation: 1150

how can add extra key,value to response of request in python

I need to add some extra key, value to response in requests lib of python3 without changing response structure (because the response will be sent into another service for the process). for example, I received this response:

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

I need to add "extra_key":"extra_value" to response:

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

and now I want to add some extra key to response and sent it to the next service without changing in structure (class, type and etc):

>>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

thank you.

Upvotes: 2

Views: 2409

Answers (1)

bruno desthuilliers
bruno desthuilliers

Reputation: 77912

response.json() is a method, so rebinding it to a dict can only lead to this behaviour indeed. Now if you read the source of the response class, you'll find out that this method actually operates on the ._content attribute (accessed via either the .content and/or .text properties). IOW, you just have to assign your serialized json string to 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'}
>>> 

This being said:

the response will be sent into another service for the process

you may want to think twice about your design then. It's of course impossible to tell without knowing much more about your concrete use case, but ask yourself whether this "other service" really needs the whole response object.

Upvotes: 3

Related Questions