JSON解码Django Python中的列表列表

时间:2014-08-13 17:42:45

标签: javascript jquery python json decode

我有一个列表(例如[[1,2],[3,4]])从Django视图传递到javascript变量并使用jQuery提交。我需要解析该变量来拉取索引。基本过程是:

添加为上下文变量(python):

resultMsgList.append(msg)
resultMsgListJson=json.dumps(resultMsgList)
resultDict['resultMsgListJson']= resultMsgListJson

Javascript:

var resultMsgList = {{resultMsgListJson}};

    var data = {'resultMsgList':resultMsgList};
    $.post(URL, data, function(result){
    });

Google控制台告诉我:

使用Javascript:

        var resultMsgList = [["View \"S03_2005_LUZ_140814_105049_with_geom\" was successfully created!", "luz_mapfile_scen_tdm_140814_105049", "S03_2005_LUZ_140814_105049_with_geom", "C:/djangoProjects/web_output/mapfiles/ATLANTA/luz_mapfile_scen_tdm_140814_105049.map", [25, 50, 498.26708421479, 131137.057816715]]];

我将此结果复制到validator,表明它是正确的JSON。

帖子给了我:

resultMsgList[0][]:View "S03_2005_LUZ_140814_105049_with_geom" was successfully created!
resultMsgList[0][]:luz_mapfile_scen_tdm_140814_105049
resultMsgList[0][]:S03_2005_LUZ_140814_105049_with_geom
resultMsgList[0][]:C:/djangoProjects/web_output/mapfiles/ATLANTA/luz_mapfile_scen_tdm_140814_105049.map
resultMsgList[0][4][]:25
resultMsgList[0][4][]:50
resultMsgList[0][4][]:498.26708421479
resultMsgList[0][4][]:131137.057816715

我需要从这个列表中获取元素。我目前有(python):

resultMsgListContext = request.POST.get('resultMsgListJson','')
resultMsgListContext = json.loads(resultMsgListContext)
oldMapfileName=resultMsgListContext[0][2] (+ a number of similar statements)

根据这个post我需要用json.loads()来解码python中的变量,但它说没有要解码的JSON对象。根据Python文档中的examples,我不确定为什么这不起作用。

2 个答案:

答案 0 :(得分:0)

我认为问题在于它将整个resultMsgList视为一个字符串,这可以通过结果中存在u'xxxxx'的事实来证实。这就是为什么它说索引超出范围,因为当它仍然是一个字符串时你试图访问一个2D数组。您必须使用json.loads将其转换为字符串数组。

答案 1 :(得分:0)

在javascript中,尝试传递

var data = {'resultMsgListJson':resultMsgList};

而不是

var data = {'resultMsgListJson': resultMsgListJson};

resultMsgListJson不是在此时定义的javascript变量,可能会被评估为undefined

通常,在python中,在尝试对其执行json.loads之前打印resultMsgListContext的内容,以便您可以准确地看到您尝试解析的内容。