Django / JS:json.dumps和parse.json

时间:2013-10-25 07:16:29

标签: javascript jquery python django json

我不是程序员,所以我不能去Django或Jquery的源代码,弄清楚这些函数如何以及为什么不返回我想要的东西,因为我根本不理解源代码

我为自己做了一个小项目,这是我对json部分的困惑: 这是我的django / python函数:

def searchPatients(request):
    patients = Patients.objects.filter(KeyName__icontains=request.POST.get('KeyName'))
    response = []
    for patient in patients:
        tmpvar = {}
        tmpvar = { 'Name1':patient.Name1, 'Name2':patient.Name2 }
        response.append(tmpvar)
    return HttpResponse(json.dumps(response), content_type="application/json")

我检查了shell,json.dumps(回复)给了我这个:

'[{"Name2": "TestName2", "Name1": "TestName1"}, {"Name2": "TempName2", "Name1": "TempName1"}]'

从我这看起来不错。然后我不明白部分开始。这是我的JS / JQuery函数:

input_newRecord_Search.keyup(function() {
    $.post('/edit/ajax_search_patients', { KeyName: $(this).val() }, function(data) {
        var patients = jQuery.parseJSON(data);
        for (var patient in patients) {
        $('#searchResults ul').append('<li>'+patients[patient].Name1+'</li><li>+'patients[patient].Name2+'</li>');
        };
    }, "json");
});

我收到错误:“SyntaxError:JSON.parse:unexpected character”。 我检查了jquery从server获取的数据:console.log(data):

[{Name2: "TestName2", Name1: "TestName1"}, {Name2: "TempName2", Name1: "TempName1"}]

所以,据我所知,JSON语法看起来像 - {“key”:“value”}而且我在关键字段上缺少引号。我不明白为什么我会想念他们。例如,我可以手动通过正则表达式,但我不认为这是正确的方法。使用正则表达式我可以解析我的整个数据而不需要jQuery.parseJSON(),但我又想使用jQuery函数 - 毕竟它是为了这个目的而制作的。 任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

诀窍是当你告诉jQuery.post服务器正在返回JSON 时,它会为你解析它

// This line can be safely removed;
// jQuery is doing it for you behind the scenes
var patients = jQuery.parseJSON(data);

当您对已经解析的数据使用parseJSON时,最终会尝试解析JavaScript对象的字符串表示形式。只需使用已经解析过的数据,一切都应该正常工作。

答案 1 :(得分:0)

jQuery会自动将json转换为js对象。你不需要自己打电话解析。