如何在jQuery中将JSON字符串转换为JavaScript对象?

32

我在数据库中有一个字符串,想要将其提取到我的页面上并转换为JavaScript对象。

[
{id: 1,title: "Long Event",
       start: new Date(2009, 5, 6, 14, 0),end: new Date(2009, 5, 11)},
{id: 2,title: "Repeating Event",
       start: new Date(2009, 5, 2)},
{id: 3,title: "Meeting",
       start: new Date(2009, 5, 20, 9, 0)},
{id: 4,title: "Click for Facebook",
       start: new Date(2009, 5, 27, 16),end: new Date(2009, 5, 29),
       url: "http://facebook.com/"}
]

我该如何使用jQuery实现这个?


可能是在jQuery中序列化为JSON的重复问题。 - outis
7个回答

64

从jQuery 1.4.1开始,您可以原生地执行此操作。

jQuery.parseJSON

请参考jQuery文档


2
完美地回答了楼主的问题。 - mkoistinen

7
“官方”json2.js脚本包括两种方法:一种可以安全地将任何JSON字符串解析为对象(JSON.parse),另一种可以将对象转换为JSON字符串(JSON.stringify)。
该脚本可在此处找到(链接)
在我上面的帖子中,我建议使用eval(),但实际上有一种稍微更好的方法来评估JSON(如果您不想使用json2.js脚本)。
var obj = (new Function("return " + json))();

使用json2.js脚本:
var obj = JSON.parse(json);

现在大多数浏览器都包含本机的JSON对象,因此不再需要包含json2.js。只需使用JSON.parse(string)JSON.stringify (object)即可。 - AlexChaffee

2

how about eval() ?

var obj = eval(jsonString);


通常情况下,使用eval并不是一个很好的想法,除非绝对没有其他方法来实现手头的目标。 - montrealist
你说得有道理,但风险是极小的。大多数情况下,你正在评估由自己的服务器代码生成的JSON,这从来不会构成安全风险。即使jQuery也会调用eval()将ajax JSON转换为对象。 - Philippe Leybaert
最简单的解决方案是最好的解决方案。如果您知道正在解析的JSON的来源,我认为eval是最好的选择。 - Thinker

1

看看JQuery-json插件

var thing = {plugin: 'jquery-json', version: 1.3};

var encoded = $.toJSON(thing);              //'{"plugin": "jquery-json", "version": 1.3}'
var name = $.evalJSON(encoded).plugin;      //"jquery-json"
var version = $.evalJSON(encoded).version;  // 1.3

1

0

use

jQuery.getJSON(url, data, callback)

或者将"type"参数设置为"json":

jQuery.get( url, data, callback, type )

对于以下情况也适用:

jQuery.post( url, data, callback, type )

*如果您从ajax请求中获取"string",则全部适用


-1

虽然您可以使用eval命令,但您需要先确保其安全性。我使用:

var data = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.
           test(source.replace(/"(\\.|[^"\\])*"/g, '')))     
           && eval('(' + source + ')');

这应该可以工作(与原始代码有些调整)。关键点是检查JSON字符串,以防止函数和其他实际可执行代码悄悄通过。(第一个正则表达式是重要的部分)。

话虽如此,JSON插件非常好用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接