python - 如何在python中为请求的响应添加额外的键、值
问题描述
我需要在requests
python3 的 lib 中添加一些额外的键和值来响应,而不改变响应结构(因为响应将被发送到另一个服务的进程)。例如,我收到了这样的回复:
>>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"
}
现在我想添加一些额外的响应键并将其发送到下一个服务而不改变结构(类、类型等):
>>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
谢谢你。
解决方案
response.json()
是一种方法,因此将其重新绑定到 dict 确实只会导致这种行为。现在,如果您阅读响应类的源代码,您会发现该方法实际上对._content
属性进行了操作(通过.content
and/or.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'}
>>>
话虽如此:
响应将被发送到该进程的另一个服务
那么你可能需要对你的设计三思而后行。如果不了解更多关于您的具体用例,当然不可能说出来,但是问问自己这个“其他服务”是否真的需要整个响应对象。
推荐阅读
- asp.net-mvc - ASP.NET Core 默认防止小数舍入
- scala - 根据可选值编写更新查询
- websphere - 由新手安装和培训 IBM Data Stage
- python-3.x - 在 Jetson Nano 上运行 python 脚本时出现 OpenCV 错误
- google-apps-script - 如何在避免权限错误的同时使用全局变量?
- ruby - 使用 HTTPparty 和 Nokogiri 获取“nil:NilClass (NoMethodError) 的未定义方法‘css’”
- sql - 控制 ID 序列但接受自定义 ID 而不重复
- java - 如何让某事在一定时间内执行
- javascript - 多个音频html:当前播放时自动停止其他
- excel - 在excel中将UTC转换为PDT