我正在构建一个应用程序,我想做一些测试。我需要将响应数据从测试客户端转换为JSON。
该应用:
tasks = [
{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]
app = Flask(__name__, static_url_path="")
@app.route('/myapp/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': [task for task in tasks]})
if __name__ == '__main__':
app.run(debug=True)
测试:
class MyTestCase(unittest.TestCase):
def setUp(self):
myapp.app.config['TESTING'] = True
self.app = myapp.app.test_client()
def test_empty_url(self):
response = self.app.get('/myapp/api/v1.0/tasks')
resp = json.loads(response.data)
print(resp)
if __name__ == '__main__':
unittest.main()
当我尝试将response.data
转换为JSON时,出现以下错误:
TypeError: the JSON object must be str, not 'bytes'
如何修复此错误并获取JSON数据?
答案 0 :(得分:26)
Flask 1.0将get_json
方法添加到响应对象,类似于请求对象。它将响应数据解析为JSON,如果不能,则会引发错误。
data = response.get_json()
在此之前,在Python 3.6之前,json.loads
需要文本,但data
是字节。响应对象提供方法get_data
,并使用as_text
参数来控制它。
data = json.loads(response.get_data(as_text=True))
答案 1 :(得分:-2)
更新:
试试resp = json.loads(str(response.data))