Django/Python将我的JavaScript POST数据转换了

3 投票
1 回答
1277 浏览
提问于 2025-04-16 04:01

当我通过Ajax向Django发送一个JSON字符串时,它会把这个字符串转换成一个无效的JSON格式。具体来说,如果我在Firebug中查看发送的post数据,我看到的是:

info    {'mid':1,'sid':27,'name':'aa','desc':'Enter info' }

但是当我在Django请求中查看时,我看到的是:

u'{\'mid\':1,\'sid\':27,\'name\':\'aa\',\'desc\':\'Enter Info\'}

当我尝试用json.loads解析这个数据时,它报错,说是无效的JSON。

我发送数据的方式是:

    data.info = "{'mid':1,'sid':27,'name':'aa','desc':'Enter info' }";
    $.ajax({url: cmdAjaxAddress,
            type: "POST",
            data: data,
            success: function(txt) {
                result = txt;
            },
            async: false });

我在Django中读取POST数据的方式是:

if request.is_ajax() and request.method == 'POST':
    infoJson = request.POST['info']
    info = json.loads(infoJson);

任何帮助都会很感激。

相关问题:

1 个回答

7

你是怎么编码你的JSON字符串的?根据规范,单引号需要改成双引号:

In [40]: s1 = "{'mid':1,'sid':27,'name':'aa','desc':'Enter info' }"

In [41]: simplejson.loads(s1)
JSONDecodeError: Expecting property name: line 1 column 1 (char 1)

In [42]: s2 = '{"mid":1,"sid":27,"name":"aa","desc":"Enter info" }'

In [43]: simplejson.loads(s2)
Out[43]: {'desc': 'Enter info', 'mid': 1, 'name': 'aa', 'sid': 27}

撰写回答