我在views.py中通过字典
返回此内容{"injured_json": [{"pk": 24, "model": "appvisual.injured_count", "fields": {"Y_2010": 75445, "Y_2008": 70251, "Y_2009": 70504, "Y_2004": 57283, "Y_2005": 62006, "Y_2006": 64342, "Y_2007": 71099, "State_UT": "Tamil Nadu", "Y_2003": 55242, "Y_2011": 74245}}], "total_json": [{"pk": 23, "model": "appvisual.total_accident", "fields": {"Y_2010": 64996, "Y_2008": 60409, "Y_2009": 60794, "Y_2004": 52508, "Y_2005": 53866, "Y_2006": 55145, "Y_2007": 59140, "State_UT": "Tamil Nadu", "Y_2003": 51025, "Y_2011": 65873}}], "killed_json": [{"pk": 24, "model": "appvisual.killed_count", "fields": {"Y_2010": 75445, "Y_2008": 70251, "Y_2009": 70504, "Y_2004": 57283, "Y_2005": 62006, "Y_2006": 64342, "Y_2007": 71099, "State_UT": "Tamil Nadu", "Y_2003": 55242, "Y_2011": 74245}}, {"pk": 60, "model": "appvisual.killed_count", "fields": {"Y_2010": 15409, "Y_2008": 12784, "Y_2009": 13746, "Y_2004": 9507, "Y_2005": 9758, "Y_2006": 11009, "Y_2007": 12036, "State_UT": "Tamil Nadu", "Y_2003": 9275, "Y_2011": 15422}}]}
在javascript中检索about json时,json数据用(和)括起来,如下所示:
({injured_json:[{pk:24, model:"appvisual.injured_count", fields:{Y_2010:75445, Y_2008:70251, Y_2009:70504, Y_2004:57283, Y_2005:62006, Y_2006:64342, Y_2007:71099, State_UT:"Tamil Nadu", Y_2003:55242, Y_2011:74245}}], total_json:[{pk:23, model:"appvisual.total_accident", fields:{Y_2010:64996, Y_2008:60409, Y_2009:60794, Y_2004:52508, Y_2005:53866, Y_2006:55145, Y_2007:59140, State_UT:"Tamil Nadu", Y_2003:51025, Y_2011:65873}}], killed_json:[{pk:24, model:"appvisual.killed_count", fields:{Y_2010:75445, Y_2008:70251, Y_2009:70504, Y_2004:57283, Y_2005:62006, Y_2006:64342, Y_2007:71099, State_UT:"Tamil Nadu", Y_2003:55242, Y_2011:74245}}, {pk:60, model:"appvisual.killed_count", fields:{Y_2010:15409, Y_2008:12784, Y_2009:13746, Y_2004:9507, Y_2005:9758, Y_2006:11009, Y_2007:12036, State_UT:"Tamil Nadu", Y_2003:9275, Y_2011:15422}}]})
由于另外添加了“(”和“)”,我无法在javascript中解析json dta。如何消除此语法错误。
我的Views.py
def get_details(request):
import pdb;pdb.set_trace();
total_details = total_accident.objects.filter(State_UT='Tamil Nadu')
total_details = serializers.serialize('python', total_details)
killed_details = Killed_Count.objects.filter(State_UT='Tamil Nadu')
killed_details = serializers.serialize('python', killed_details)
injured_details = Injured_Count.objects.filter(State_UT='Tamil Nadu')
injured_details = serializers.serialize('python', injured_details)
page_data = {
"total_json" : total_details,
"killed_json" : killed_details,
"injured_json" : injured_details,
}
page_data= simplejson.dumps(page_data)
print page_data
return render_to_response('dvslzer.html', {'page_data':page_data})
我的剧本:
function test() {
var dataRows = {{page_data}};
console.log(dataRows.toSource());
var data=JSON.parse(dataRows.total_accident); // throws syntax error
console.log(data[0].pk);
};
有没有解决方法来摆脱这种语法错误?
答案 0 :(得分:2)
将上述评论中我们设法建立的内容拼凑在一起,这一行:
var data=JSON.parse(dataRows.total_accident);
......实际应该是:
var data = dataRows.total_json;
因为首先在名为total_accident
的对象中没有属性,其次尝试使用JSON.parse()
没有意义,因为那时你实际上并没有处理JSON。 / p>
(JS根本没有真正处理JSON,因为服务器端{{page_data}}
将JSON直接输出到页面源中,所以当浏览器看到它时它只是显示为对象文字在你的JS代码中。如果它是JSON,你需要在JSON.parse()
上使用dataRows
才能开始使用点表示法访问属性。)
答案 1 :(得分:0)
您可以先处理数据,然后将其解析为JSON。
var data;
// removes first and last characters from data
data = data.substring(1, data.length - 1);
// convert data to JSON
data = JSON.parse(data);