为什么JSON.parse()在我的代码中不起作用?

时间:2018-11-08 21:29:18

标签: javascript python json django

我正在使用Django,并尝试直接使用javascript获取数据。这是一些代码。在idx_map.html中,JS部分如下所示:

 var act = '{{ activities_json }}';

    document.getElementById("json").innerHTML = act[0];

    var obj = JSON.parse(act);

    document.getElementById("demo").innerHTML = 1;

我正在尝试查找错误,因此我在代码中添加了一些代码以输出到页面。问题是JSON.parse()行。如果在该行中添加注释,则可以在HTML页面中看到[和1,这意味着还没有错误。但是,如果我取消对JSON.parse()行的注释,我将再也看不到1,表明JSON.parse()代码有错误。但是我没有发现任何错误。有人可以帮我吗?

在views.py中,我将该对象序列化为一个json文件。代码是:

def map(request):
activities_json = serializers.serialize("json", Activities.objects.all())
context = {
    "activities": Activities.objects.all(),
    "activities_json": activities_json,
}
return render(request, "CS_Activities/idx_map.html", context)

因此该行为应如下所示(作为字符串?):

[
    {"model": "CS_Activities.activities", "pk": 1, "fields": {"act_name": "gun shot", "location": "York Universitty", "loc_lat": 43.76776, "loc_long": -79.50297, "time": "2018-11-05T20:25:08Z", "description": "a people dead"}}, {"model": "CS_Activities.activities", "pk": 2, "fields": {"act_name": "another gun shot", "location": "York Village", "loc_lat": 43.76, "loc_long": -79.5, "time": "2018-11-05T22:35:06Z", "description": "A person shot dead while walking"}}
]

更新: 在idx_map.html中,如果我只是将var替换为长字符串,则不会有任何错误。因此,我认为我的问题是如何从Django数据库中以json文件格式检索数据。

1 个答案:

答案 0 :(得分:1)

您需要使用safe将该字符串(在这种情况下为JSON)标记为不需要在输出之前进行进一步的HTML转义。

var act = '{{ activities_json|safe }}';

这部分代码:

document.getElementById("json").innerHTML = act[0];

只获取字符串的第一个元素,即[。

这部分代码

var obj = JSON.parse(act);

返回错误,因为您以前没有使用过safe,并且引号(“)在模板中以&quote;的形式输出,这是无效的。我想您想要这样的东西:

var act = '{{ activities_json|safe }}';
var lat = 43.767760;
var lng = -79.502970;
var latLng = {lat: lat, lng: lng};       

var obj = JSON.parse(act);
document.getElementById("json").innerHTML = obj[0];

现在obj[0]将返回第一个JSON元素,但是我不确定您要使用它做什么。