2016-08-27 10 views
0

を受ける:ここフラスコは私がの形で、サーバへのクライアントポストデータでフラスコWebアプリケーションに取り組んでいますポストJSON

{ 
"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'}) 

問題は、データが「バイト」タイプではなく、広告であるということですict。私もrequest.jsonまたはrequest.get_json(silent = True)を呼び出すことはできません、それは "400悪い要求"を返します。ここで

はrequest.dataであるもののサンプルです:

b'sess_id=1&annotations%5B0%5D%5Btag_start%5D=2... 

何らかの理由でURLエンコードのように見えます。値も空です。私が野生の何かをすることを選択した場合、content-type = jsonを除外します。私はdictのようなものを得ることができますが、私はそれを非常に奇妙にアクセスする必要があります。私は個々のオブジェクトを取得するのではなく、むしろすべてのプロパティにフラットアクセスする。

jsonを妥当なオブジェクトに解析する方法についてのご意見はありますか?

ありがとうございました!

答えて

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の辞書としてそれを得ることができます。

関連する問題