如何将JSON字符串转换为对象?

如何在JavaScript中将JSON字符串转换为对象? 有没有这样做的方法?

就像是:

var x = "{ id: 5, name: 'hello' }"; var y = /*something*/(x); alert(y.id + " " + y.name); 

根据评论和问题历史记录,您似乎已经在使用jQuery了。 在这种情况下,最好知道jQuery附带了一个新的parseJSON()函数,因为版本1.4.1是在今年1月下旬发布的。 如果您尚未达到1.4.1,请考虑升级。 以下是其API文档的相关摘录:

描述 :采用格式良好的JSON字符串并返回生成的JavaScript对象。

添加了jQuery.parseJSON(json)版本: 1.4.1

json要解析的JSON字符串。

传入格式错误的JSON字符串将导致抛出exception。 例如,以下是所有格式错误的JSON字符串:

  • {test: 1} (测试周围没有双引号)。
  • {'test': 1} (’test’使用单引号而不是双引号)。

此外,如果您没有传入任何内容,空字符串,null或未定义,将从parseJSON返回’null’。 在浏览器提供JSON.parse的本机实现的地方,jQuery使用它来解析字符串。 有关JSON格式的详细信息,请参阅http://json.org/ 。

例:

解析JSON字符串。

 var obj = jQuery.parseJSON('{"name":"John"}'); alert( obj.name === "John" ); 

使用json2 lib: http : //www.json.org/js.html

布鲁诺,

这是jquery方法,正如您将看到的,它使用自我相同的新函数(“return ..”)。

 parseJSON: function (a) { if (typeof a !== "string" || !a) return null; if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return z.JSON && z.JSON.parse ? z.JSON.parse(a) : (new Function("return " + a))(); else c.error("Invalid JSON: " + a) } 

[编辑]正则表达式当然是“处理”json字符串中嵌入的任何流氓字符。

幽灵般的:)

本段完全涵盖了本机JSON实现以及使用本机JSON实现的库: http : //en.wikipedia.org/wiki/JSON#Native_JSON

使用本机JSON实现比使用某些javascript库执行相同任务要快得多/更安全。 但是,如果某些库声称它会尽可能尝试使用本机实现 – 直接使用本机JSON(兼容性和东西)是更好的选择。

JSON.org网站提供了最简单的解决方案:

 var y = eval('(' + x + ')'); 

更多信息

编辑:哦。 对。 当且仅当您确定可以信任源以生成正确的JSON对象时, eval解决方案才是好的。 否则,您将不得不使用JSON解析器 – 查看其他回复。

你还可以做以下比eval更邪恶:):

 var x = '{ "id": 5, "name": "hello" }'; var y = new Function("return " + x)(); alert(y.id + " " + y.name); 

如其他人所说,如果你正在使用jquery,那就选择内置的parseJson方法。