【问题标题】:Syntax error while parsing Json data in javascript在 javascript 中解析 Json 数据时出现语法错误
【发布时间】:2014-01-05 14:08:02
【问题描述】:

我通过字典在我的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。我怎样才能消除这个语法错误。

我的观点.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);
};  

有什么办法可以解决这个语法错误??

【问题讨论】:

  • 不要加括号。 (为什么首先添加它们?)
  • @nnnnnn:如果我删除“{{”和“}}”,那么它会引发参考错误
  • 括号是圆括号(),你说它是出于某种原因在途中添加的。无论如何,您在问题开头显示的 JSON 没有名为 total_accident 的属性,所以 dataRows.total_accident 不会未定义吗?这反过来意味着JSON.parse(dataRows.total_accident) 应该给你一个错误......
  • @nnnnnn:不,一切都已明确。而且我要添加那个括号..当我在console.log上打印它们时它会被添加
  • 啊。然后你可以说var data = dataRows.total_json;。你不需要JSON.parse(),因为在那个阶段你不是在处理 JSON,你有一个实际的 JS 对象。

标签: javascript python django json


【解决方案1】:

将我们在上面的 cmets 中设法建立的内容拼凑起来,这一行:

var data=JSON.parse(dataRows.total_accident);

...实际上应该是:

var data = dataRows.total_json;

因为首先在名为total_accident 的对象中没有属性,其次尝试使用JSON.parse() 没有意义,因为此时您实际上并没有处理JSON。

(JS 根本没有真正处理 JSON,因为服务器端 {{page_data}} 将 JSON 直接输出到页面源中,所以当浏览器看到它时,它只是在你的JS 代码。如果是 JSON,则需要在 dataRows 上使用 JSON.parse(),然后才能开始使用点符号访问属性。)

【讨论】:

    【解决方案2】:

    您可以先处理数据,然后将其解析为 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);
    

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多