如何通过来自 JS 和服务器端的 AJAX 调用传递复合 JSON 结构,将其读取为 python 中“非常相似”的数据结构?
我知道可以使用 json 格式(simplejson 等),但我觉得 QueryDict 本身在我的情况下格式错误或重新格式化?
例子:
当通过 AJAX 将 JSON 对象数组 [{"id": 1},{"id": 2},{"id": 3}] 传递给 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"
);
视图.py:
def insert_tc(request):
if request.method == 'POST':
ret = request.POST
type = ret['type']
list = ret.getlist(ret)
但列表返回空 []
我尝试了 simplejson 转储、加载、项目、获取方法,但它们都没有帮助。
我什至尝试过 jQuery.param(obj, true),但这不是我想要的(虽然有点接近)。
有没有不同/更好的方法通过 AJAX 来回传递复合数据结构 Django <-> JS?