首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Falcon解析json错误

Falcon解析json错误
EN

Stack Overflow用户
提问于 2016-10-09 18:00:16
回答 2查看 1.9K关注 0票数 1

我正在为一个小型api项目试用Falcon。不幸的是,我被困在json解析的东西上了,文档示例中的代码不起作用。

我尝试了很多我在Stack和Google上找到的东西,但是没有改变。我尝试了以下代码,这些代码会导致以下错误

代码语言:javascript
复制
import json
import falcon

class JSON_Middleware(object):
    def process_request(self, req, resp):
       raw_json = json.loads(req.stream.read().decode('UTF-8'))
       """Exception: AttributeError: 'str' object has no attribute 'read'"""

       raw_json = json.loads(req.stream.read(), 'UTF-8')
       """Exception: TypeError: the JSON object must be str, not 'bytes'"""

       raw_json = json.loads(req.stream, 'UTF-8')
       """TypeError: the JSON object must be str, not 'Body'"""

我马上就要放弃了,但是如果有人能告诉我为什么会发生这种情况,以及如何在Falcon中解析JSON,我会非常感激的。

谢谢

环境:OSXSieryPython3.5.2 Falcon和其他是Pip的最新版本

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-10 09:14:11

如果其他代码已经到位,您的代码应该可以工作。快速测试(文件名app.py):

代码语言:javascript
复制
import falcon
import json

class JSON_Middleware(object):
    def process_request(self, req, resp):
       raw_json = json.loads(req.stream.read())
       print raw_json

class Test:
    def on_post(self,req,resp):
        pass

app = application = falcon.API(middleware=JSON_Middleware())
t = Test()
app.add_route('/test',t)

运行:gunicorn app

$ curl -XPOST 'localhost:8000' -d '{"Hello":"wold"}'

票数 2
EN

Stack Overflow用户

发布于 2017-07-30 15:50:37

您必须在read()返回的字节上使用类似于req.stream.read().encode('utf-8')的内容调用req.stream.read().encode('utf-8')

这样,字节就会像json.loads()所期望的那样转换为str。

另一种不去理会所有这些无聊和容易出错的编码/解码和字节/str( BTW在Py2和Py3中不同)的方法是使用simplejson作为json的替代品。它与API兼容,所以唯一的改变就是在代码中用import simplejson as json替换import simplejson as json

此外,它还简化了代码,因为可以使用json.load(req.bounded_stream)来读取正文,这比json.loads(req.bounded_stream.read().encode('utf-8'))短得多,可读性强得多。

现在我这样做了,不再使用标准的json模块了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39946770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档