JS对象的JSON字符串

时间:2010-02-13 09:50:23

标签: javascript jquery json jsonp getjson

我正在使用JS对象使用Google可视化创建图形。我正在尝试设计数据源。起初,我创建了一个JS对象客户端。

var JSONObject = {
    cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
        {id: 'soldpens', label: 'Sold Pens', type: 'number'}],
    rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
        {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
     {c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}]  
};

var data = new google.visualization.DataTable(JSONObject, 0.5);

现在我需要动态获取数据。所以我发送一个AJAX请求到一个返回JSON字符串的页面:

 "cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
  rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
      {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}"

这个我保存到一个变量:

var var1 = "cols: [{i ....... 66}]}"

并显示为

alert(var1);

现在我的任务是从这个字符串创建一个JS对象。这不起作用。当我使用JS对象时,一切正常,我能够获得所需的图形。现在,如果我尝试将从警报消息中确认的AJAX请求中的相同值的字符串放入n对象中,则无法正确创建对象。请让我知道您的意见和任何更正或建议。

5 个答案:

答案 0 :(得分:132)

一些现代浏览器支持将JSON解析为本机对象:

var var1 = '{"cols": [{"i" ....... 66}]}';
var result = JSON.parse(var1);

对于不支持它的浏览器,您可以从json.org下载json2.js以安全地解析JSON对象。该脚本将检查本机JSON支持,如果它不存在,请改为提供JSON全局对象。如果更快的本机对象可用,它将退出脚本,使其保持原样。但是,您必须提供有效的JSON,否则会产生错误 - 您可以使用http://jslint.comhttp://jsonlint.com检查JSON的有效性。

答案 1 :(得分:5)

如果您信任字符串中的数据,则可以使用eval(jsonString),否则您需要正确解析它 - 请查看json.org以获取一些代码示例。

答案 2 :(得分:5)

你问题中的字符串不是有效的json字符串。来自json.org website

  

JSON基于两种结构:

* A collection of name/value pairs. In various languages, this is 
  realized as an object, record, struct, dictionary, hash table, keyed list, or
  associative array.
* An ordered list of values. In most languages, this is realized as an
  array, vector, list, or sequence.

基本上,json字符串始终以{或[。

}开头

然后@Andy E和@Cryo说你可以用json2.js或其他一些库解析字符串。

恕我直言,你应该避免使用eval,因为它会有任何javascript程序,所以你可能会遇到安全问题。

答案 3 :(得分:4)

您可以使用JSON.org中的this library将您的字符串转换为JSON对象。

var var1_obj = JSON.parse(var1);

或者您也可以使用jquery-json库。

var var1_obj = $.toJSON(var1);

答案 4 :(得分:3)

您要返回的字符串无效JSON。需要引用对象中的名称,并且需要将整个字符串放在{ … }中以形成对象。 JSON也不能包含new Date()之类的内容。 JSON只是JavaScript的一小部分,只包含字符串,数字,对象,数组,truefalsenull

有关详细信息,请参阅JSON grammar