我正在对我的Flask应用程序执行测试,我期待使用jsonify
构建的json响应。我使用ast
库来解码响应。但我收到以下错误:
Traceback (most recent call last):
File "test_index.py", line 177, in test_create_venue
data = ast.literal_eval(rv.data)
File "/Users/manuelgodoy/anaconda/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/Users/manuelgodoy/anaconda/lib/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/Users/manuelgodoy/anaconda/lib/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/Users/manuelgodoy/anaconda/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
我的测试功能如下:
def test_create_venue(self):
rv = self.app.get("/data_send")
data = ast.literal_eval(rv.data)
self.assertTrue(data["Sent"])
应用程序的功能是:
@app.route('/data_send', methods = ['GET'])
def data_send():
usr = User.get_by_id(g.user.key.id())
usr.get_last_order().set_as_posted()
rest = usr.restaurant
for c in rest.channel_set():
try:
channel.send_message(c.cid, 'ping')
except:
return jsonify(Sent = False)
return jsonify(Sent = True)
Jsonify发送以下回复:
'{\n "Sent": true\n}'
但ast
无法将小写true
识别为布尔值。因此,它提出ValueError
。
知道如何将jsonify
的响应转换为维护布尔值的Dict
,以便我可以执行布尔断言吗?
答案 0 :(得分:0)
不要使用literal_eval
加载JSON。如初。
使用Flask's JSON decoder或app-specific decoder。
from flask import json
data = json.loads(rv.data)
# or
self.app.json_decoder.decode(rv.data)
如果您没有使用Flask,并且需要加载JSON,请使用built-in module。
import json
data = json.loads(json_data)