JSON 字符串到 JS 对象

我使用一个 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);

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

 "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 对象中,这个对象没有被正确创建。请让我知道你的意见和任何更正或建议。

162335 次浏览

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

可以使用 JSON.org 中的 这个图书馆将字符串转换为 JSON 对象。

var var1_obj = JSON.parse(var1);

或者也可以使用 Jquery-Json库。

var var1_obj = $.toJSON(var1);

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

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

对于不支持它的浏览器,您可以从 Json.org下载 json2.js,以便安全地解析 JSON 对象。该脚本将检查本机 JSON 支持,如果不存在,则提供 JSON 全局对象。如果速度更快的本机对象可用,它将退出脚本而保持完整。但是,您必须提供有效的 JSON,否则它将抛出一个错误 & mash; 您可以使用 http://jslint.comhttp://jsonlint.com检查 JSON 的有效性。

问题中的字符串不是有效的 json 字符串:

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 程序,所以您可能会遇到安全问题。

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

有关更多信息,请参见 JSON 语法