我正在开发一个烧瓶网络应用程序,客户端以下列形式将数据发布到服务器:
{
"sess_id" : 1 ,
"annotations" :
[ {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}, {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}, {"tag_start" : "TIME","tag_end" : "TIME","tag" : "YOUR_TAG"}]
}
以下是完整的Ajax帖子......
$.ajax({
url: 'http://127.0.0.1:5000/api/saveannotation',
type: 'POST',
headers: {'Content-Type' : 'application/json'},
data: {'sess_id' : $('#sessionid_area').val(),
'annotations': JSON.parse(annotations)},
success: function(data) { alert(data.status); }
});
所以我甚至可以在api方面看到这个,定义如下:
@sessionapis.route('/saveannotation', methods=['GET', 'POST'])
@login_required
def save_annotation():
rData = request.data
if request.method == 'GET':
return jsonify({'status' : 'success GET'})
else:
return jsonify({'status' : 'success'})
问题是数据是“字节”类型,而不是字典。我也无法调用request.json或request.get_json(silent = True),它返回“400 bad request”。
以下是request.data中的内容示例:
b'sess_id=1&annotations%5B0%5D%5Btag_start%5D=2...
由于某种原因,它似乎是网址编码。值也是空的。如果我选择做一些疯狂的事情,比如省略内容类型= json;我可以得到类似字典的东西,但我必须非常奇怪地访问它。我没有得到单个对象,而只是对所有属性的平面访问。
关于如何将json解析为合理对象的任何想法?
感谢任何提示!
答案 0 :(得分:2)
仅传递JSON的内容类型标头实际上并不会使数据本身成为JSON。你需要自己做,或者告诉jQuery这样做。
$.ajax({
url: 'http://127.0.0.1:5000/api/saveannotation',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({'sess_id' : $('#sessionid_area').val(),
'annotations': JSON.parse(annotations)}),
success: function(data) { alert(data.status); }
});
现在您的数据将采用JSON格式,您可以将其作为带有request.get_json()
的Python词典获取。