首页 > 解决方案 > 为什么 JSON.parse() 在我的代码中不起作用?

问题描述

我正在使用 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 文件格式检索数据。

标签: javascriptpythonjsondjango

解决方案


您需要使用safewhich 将字符串(或本例中的 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 元素,但我不确定你想用它做什么。


推荐阅读