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

时间:2010-06-10 11:17:12

标签: javascript jquery json

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

类似的东西:

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

alert(y.id + " " + y.name);

6 个答案:

答案 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 + ')');

More information

编辑:哦。对。当且仅当您确定可以信任源以生成正确的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方法。