JSON字符串到JS对象

Posted

技术标签:

【中文标题】JSON字符串到JS对象【英文标题】:JSON string to JS object 【发布时间】:2011-01-16 11:01:45 【问题描述】:

我正在使用 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 对象,则该对象未正确创建。请让我知道您的意见以及任何更正或建议。

【问题讨论】:

使用 javascript eval(json_string) 方法获取字符串到 json 对象。但请注意,同样的功能可能具有潜在危险,因为它也可以执行脚本。 仅供参考 - 键名和字符串必须在有效 JSON 中的 " 内:simonwillison.net/2006/Oct/11/json Serializing to JSON in jQuery的可能重复 看看这个w3schools.com/json/json_eval.asp 【参考方案1】:

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

【讨论】:

我可以信任来自大型网站 API (Reddit) 的内容吗?【参考方案2】:

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

var var1_obj = JSON.parse(var1);

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

var var1_obj = $.toJSON(var1);

【讨论】:

【参考方案3】:

一些现代浏览器支持将 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 的有效性。

【讨论】:

【参考方案4】:

您问题中的字符串不是有效的 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 程序,因此您可能会遇到安全问题。

【讨论】:

【参考方案5】:

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

请参阅JSON grammar 了解更多信息。

【讨论】:

以上是关于JSON字符串到JS对象的主要内容,如果未能解决你的问题,请参考以下文章

JS: Json数据 转字符串存储到后台;后台取出该字符串 转Json对象

我拼成的JSON字符串,然后转换JSON对象成功了,但是到了后台报错.

怎么把json字符串转成数组对象

JSON字符串转换JSON对象,在JS页面转换成功,但是ajax提交json数据,后台解析抛出异常

前端js把json字符串转json对象 java对象转json对象命令

JS json字符串转对象对象转字符串