我正在尝试使用基于JSON的restful协议为python3应用程序编写一个简单的服务器前端。到目前为止,bottle似乎是最适合这项任务的框架(它支持python3,以一种很好的方式处理方法调度,并且很容易返回JSON)。问题是解析输入请求中的JSON。
文档中只提到了request.fields
和request.files
,我认为这两个都是指multipart/form-data数据,没有提到直接访问请求数据。
查看源代码,我可以看到一个BytesIO类型的request.body
对象。json.load
拒绝直接作用于它,在json库中使用can't use a string pattern on a bytes-like object
终止。正确的方法可能是首先根据Content-Type
HTTP头中指定的字符集将字节解码为unicode字符。我可以看到一个StringIO类,并假设它可能保存字符缓冲区,而不是字节缓冲区,但看不到将BytesIO解码为StringIO的方法,如果这是可能的话。
当然,也可以将BytesIO对象读入字节串,然后在将其传递给JSON解码器之前将其解码为字符串,但如果我理解正确的话,这会破坏整个过程的良好缓冲行为。
或者有没有更好的办法?
4条答案
按热度按时间x8goxv8g1#
下面是我在使用Python3和Bottle的RESTful服务上阅读json时所做的事情:
将bson.json_util导入为bson_json
然后进行测试
e7arh2l62#
我写了一个助手来使用b0fh的好主意。在response.json分析了2周后,我连接到StackOver Flow,并了解到我们需要一个变通方案
这里是:
在使用上,我们可以做到:
感谢所有人
fjnneemd3#
如注解(and in a similar SO answer)中所述,
request.json
方法可从瓶0.1.0中获得。比如:
at0kjp5o4#
看起来标准库中的io.TextIOWrapper就能做到这一点!