我正在使用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对象中,则无法正确创建对象。请让我知道您的意见和任何更正或建议。
答案 0 :(得分:132)
一些现代浏览器支持将JSON解析为本机对象:
var var1 = '{"cols": [{"i" ....... 66}]}';
var result = JSON.parse(var1);
对于不支持它的浏览器,您可以从json.org下载json2.js以安全地解析JSON对象。该脚本将检查本机JSON支持,如果它不存在,请改为提供JSON全局对象。如果更快的本机对象可用,它将退出脚本,使其保持原样。但是,您必须提供有效的JSON,否则会产生错误 - 您可以使用http://jslint.com或http://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的一小部分,只包含字符串,数字,对象,数组,true
,false
和null
。
有关详细信息,请参阅JSON grammar。