2012-03-28 101 views
2

我需要一些关于JavaScript的帮助。我做了一个ajax调用点击按钮,它返回下面的String,这是使用GSON生成的(基本上它是一个JSON对象)。如何将JSONString转换为Javascript对象

{ 
    "chart":{ 
     "renderTo":"container", 
     "type":"bar" 
    }, 
    "title":{ 
     "text":"Engagement Per Vendor Per GBP" 
    }, 
    "subtitle":{ 
     "text":"ASPT" 
    }, 
    "xAxis":{ 
     "categories":[ 
     "A", 
     "B", 
     "C", 
     "D" 
     ], 
     "title":{ 
     "text":"Engagement Per Vendor Per GBP" 
     } 
    }, 
    "yAxis":{ 
     "min":0, 
     "title":{ 
     "text":"Count", 
     "align":"high" 
     } 
    }, 
    "plotOptions":{ 
     "bar":{ 
     "dataLabels":{ 
      "enabled":true 
     } 
     } 
    }, 
    "legend":{ 
     "layout":"vertical", 
     "align":"right", 
     "verticalAlign":"bottom", 
     "x":-100, 
     "y":100, 
     "floating":true, 
     "borderWidth":1, 
     "backgroundColor":"#FFFFFF", 
     "shadow":true 
    }, 
    "credits":{ 
     "enabled":true 
    }, 
    "series":[ 
     { 
     "name":"ABC", 
     "data":[ 
      10, 
      20, 
      20, 
      30 
     ] 
     }, 
     { 
     "name":"DEF", 
     "data":[ 
      10, 
      20, 
      30, 
      40 
     ] 
     }, 
     { 
     "name":"GHIJ", 
     "data":[ 
      20, 
      30, 
      40, 
      10 
     ] 
     }, 
     { 
     "name":"KLMN", 
     "data":[ 
      10, 
      40, 
      20, 
      30 
     ] 
     } 
    ] 
} 

当我得到这些数据在我的JavaScript。 我试图使用下面的语句

var jsonObj = eval(xmlHttp.responseText); 

xmlHttp.responseText将对象转换为JSON具有以下字符串

{"chart":{"renderTo":"container","type":"bar"},"title":{"text":"Engagement Per Vendor Per GBP"},"subtitle":{"text":"ASPT"},"xAxis":{"categories":["A","B","C","D"],"title":{"text":"Engagement Per Vendor Per GBP"}},"yAxis":{"min":0,"title":{"text":"Count","align":"high"}},"plotOptions":{"bar":{"dataLabels":{"enabled":true}}},"legend":{"layout":"vertical","align":"right","verticalAlign":"bottom","x":-100,"y":100,"floating":true,"borderWidth":1,"backgroundColor":"#FFFFFF","shadow":true},"credits":{"enabled":true},"series":[{"name":"ABC","data":[10,20,20,30]},{"name":"DEF","data":[10,20,30,40]},{"name":"GHIJ","data":[20,30,40,10]},{"name":"KLMN","data":[10,40,20,30]}]} 

当我尝试运行JSP,它停在var jsonObj = eval(xmlHttp.responseText);

在很多时候我已经完成了这个工作,但这次数据是不同的。 JSON字符串由GSON API的JSON方法创建。

除非我把它放入JSON对象中,否则我将无法做任何事情。任何对此的帮助都是可以理解的。

问候, Senny

回答

3

这是一个有效的JSON格式,因此使用时JSON.parse(xmlHttp.responseText)可能(IE8 +,火狐,Chrome,歌剧,Safari ...),并使用eval('(' + xmlHttp.responseText + ')')为IE6-7,注意,您应该使用eval当添加一个额外的一对托架的():

if (JSON) return JSON.parse(xmlHttp.responseText); 
else return eval('(' + xmlHttp.responseText + ')'); 
+0

+1 JSON.parse的建议(我希望我能同时-1,而不是+0,因为*不建议*使用库在旧版浏览器中修补/填充JSON.parse) – 2012-03-28 09:12:01

+0

JSON解析器将只识别JSON文本,拒绝所有脚本。在提供本机JSON支持的浏览器中,JSON解析器也比eval快得多。 – antonjs 2012-03-28 09:15:48