如何在JavaScript中将JSON字符串转换为对象?有没有这样做的方法?
类似的东西:
var x = "{ id: 5, name: 'hello' }";
var y = /*something*/(x);
alert(y.id + " " + y.name);
答案 0 :(得分:9)
根据评论和问题历史记录,您似乎已经在使用jQuery了。在这种情况下,很高兴知道jQuery附带了一个新的parseJSON()
函数,因为version 1.4.1是在今年1月下旬发布的。如果您尚未达到1.4.1,请考虑升级。以下是其API文档的相关摘录:
说明 :使用格式正确的JSON字符串并返回生成的JavaScript对象。
jQuery.parseJSON(json)版本已添加:1.4.1
json 要解析的JSON字符串。
传入格式错误的JSON字符串将导致抛出异常。例如,以下是所有格式错误的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" );
答案 1 :(得分:5)
使用json2 lib:http://www.json.org/js.html
答案 2 :(得分:2)
布鲁诺,
这里是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)
}
[edit] 正则表达式当然是“处理”json字符串中嵌入的任何流氓字符。
幽灵般地说:)答案 3 :(得分:1)
本段完全涵盖了本机JSON实现以及使用本机JSON实现的库: http://en.wikipedia.org/wiki/JSON#Native_JSON
使用本机JSON实现比使用某些javascript库执行相同任务要快得多/更安全。但是,如果某些库声称它会尽可能尝试使用本机实现 - 直接使用本机JSON(兼容性和东西)是更好的选择。
答案 4 :(得分:0)
JSON.org网站提供了最简单的解决方案:
var y = eval('(' + x + ')');
编辑:哦。对。当且仅当您确定可以信任源以生成正确的JSON对象时,eval
解决方案才是好的。否则,您将不得不使用JSON解析器 - 查看其他回复。
答案 5 :(得分:0)
你也可以做以下比eval略逊一筹的恶魔:):
var x = '{ "id": 5, "name": "hello" }';
var y = new Function("return " + x)();
alert(y.id + " " + y.name);
如其他人所说,如果你正在使用jquery,那就选择内置的parseJson方法。