【问题标题】:JSON decode list of lists in Django PythonDjango Python中列表的JSON解码列表
【发布时间】:2014-08-13 17:42:44
【问题描述】:

我有一个列表列表(例如 [[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,我不确定为什么这不起作用。

【问题讨论】:

    标签: javascript jquery python json decode


    【解决方案1】:

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

    【讨论】:

    • 这似乎是问题所在。我使用了 json.dumps(我相信 json.loads 是用于从 python 中的 JSON 解码)。这使我在javascript中的变量值:“[ “浏览\” S03_2005_LUZ_140814_092308_with_geom \ “创建成功!”, “luz_mapfile_scen_tdm_140814_092308”, “S03_2005_LUZ_140814_092308_with_geom”, “C:/djangoProjects/web_output/mapfiles/ATLANTA/luz_mapfile_scen_tdm_140814_092308.map” , [25, 50, 498.26708421479, 131137.057816715]]]';.我的理解是这应该有效,因为它正确地转义了列表中的双引号。但是,它仍然说它是一个字符串。
    • 我也试过 JSON.parse 这个变量,但它似乎不喜欢引用。
    • 我尝试在 python 中的返回值上使用 JSON.loads,但它说没有要解码的 JSON 对象。
    【解决方案2】:

    在javascript中,尝试传递

    var data = {'resultMsgListJson':resultMsgList};
    

    而不是

    var data = {'resultMsgListJson': resultMsgListJson};
    

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

    一般来说,在 python 中,在尝试对其执行 json.loads 之前打印resultMsgListContext 的内容,这样您就可以准确地看到您要解析的内容。

    【讨论】:

    • 对不起。我纠正了我的问题。我有 var data = {'resultMsgList': resultMsgListJson}。名称相似的相关变量过多。
    • 您是否尝试在检索 request.POST.get('resultMsgListJson','') 后立即放置打印语句?这将准确地告诉您从 POST 字典中检索到的内容(如果有的话)。如果它说没有要解码的 JSON 对象,这可能意味着您没有检索到您认为正在检索的内容。 (还要检查您要检索的变量名称。在问题中,它不再与您在模板中所说的发送内容匹配。)
    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多