我想将传入的 HTTP 请求的 header 转换为字典,然后通过“JSON 技巧”进行克隆。 request.headers
是一个类似于字典的对象,但实际上并不是字典。
json.loads(json.dumps(request.headers))
上述代码行导致此错误:
TypeError: EnvironHeaders([•••]) is not JSON serializable
如何将 werkzeug.datastructures.EnvironHeaders
对象转换为字典?
尝试 #1:
json.loads(json.dumps({k: v for k, v in request.headers.iteritems()}))
尝试 #2:
json.loads(json.dumps({k: request.headers[k] for k in request.headers.keys()}))
他们都抛出这个异常:
ValueError: too many values to unpack
最佳答案
这是一个肯定有效的最小示例
headers = werkzeug.datastructures.Headers()
headers.add('Content-Type', 'text/plain')
headers.add('X-Foo', 'bar')
json.dumps({k:v for k, v in headers.iteritems()})
即使您使用的是 EnvironHeaders
,
env = {
'HTTP_CONTENT_TYPE': 'text/html',
'CONTENT_TYPE': 'text/html',
'HTTP_CONTENT_LENGTH': '0',
'CONTENT_LENGTH': '0',
'HTTP_ACCEPT': '*',
'wsgi.version': (1, 0)
}
headers = werkzeug.datastructures.EnvironHeaders(env)
json.dumps({k:v for k, v in headers.iteritems()})
(从 test cases in werkzeug 复制的示例。)
您是否在调试器中检查过 request.headers.items()
?
像这样,
items = request.headers.items()
import ipdb
ipdb.set_trace() # check type of items; is it an iterable of pairs?
关于python - 类型错误 : EnvironHeaders([•••]) is not JSON serializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156867/