JSからのAJAX呼び出しを介して複合JSON構造を渡し、サーバー側で、Pythonで「非常に類似した」データ構造として読み取るにはどうすればよいですか?
jsonフォーマット(simplejsonなど)を使用できることは理解していますが、私の場合、QueryDict自体が不正または再フォーマットされているとどういうわけか感じますか?
例:
JSONオブジェクトの配列[{"id":1}、{"id":2}、{"id":3}]をAJAX経由でDjangoビューに渡すと、QueryDictは次のようにフォーマットされます。
POST:<QueryDict: {u'json_data[0][id]': [u'1'], u'type': [u'clone'],
u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'],
u'json_data[1][id]': [u'2'], u'json_data[2][id]': [u'3']}>
json_dataを反復処理するにはどうすればよいですか?
代わりに次のようなものを取得したい:
POST:<QueryDict: {u'json_data': [{u'id': [u'1']}, {u'id': [u'2']}, {u'id': [u'3']}]},
u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'], u'type': [u'clone']>
これにより、QueryDictに辞書としてアクセスし、json_dataをリストとして取得して、特定の順序で処理できるようになります。おそらく、リストの順序でそれらを反復処理するだけです。何かのようなもの:
ret = request.POST
for item in ret['json_data']:
process(item['id'])
実際、process()に入る値は、単なる数値(1、2、3など)ではなく、キーと値のペアの別のディクショナリである可能性があります。
Javascript:
var test = [{"id": 1},{"id": 2},{"id": 3}];
$.post(
"/insert_tc",
{
json_data: test,
"type": 'clone',
"csrfmiddlewaretoken": $csrf_token
},
function(json) {
//CALLBACK
},
"json"
);
views.py:
def insert_tc(request):
if request.method == 'POST':
ret = request.POST
type = ret['type']
list = ret.getlist(ret)
しかし、リストは空を返します[]
simplejsonのダンプ、ロード、アイテム、getメソッドを試しましたが、どれも役に立ちませんでした。
jQuery.param(obj、true)も試しましたが、それは私が望んでいることではありません(多少近いですが)。
AJAXを介して複合データ構造をDjango<->JSとの間でやり取りするための別の/より良い方法はありますか?