协慌网

登录 贡献 社区

在 JavaScript 中解析 JSON?

我想在 JavaScript 中解析 JSON 字符串。响应是这样的

var response = '{"result":true,"count":1}';

如何获得值result并从中count

答案

大多数浏览器都支持JSON.parse() ,它在 ECMA-262 第 5 版(JavaScript 所基于的规范)中定义。它的用法很简单:

var json = '{"result":true,"count":1}',
    obj = JSON.parse(json);

alert(obj.count);

/* or ES6 */

const json = '{"result":true,"count":1}' || {};
const { result, count } = JSON.parse(json);
alert(result);
alert(count);

对于没有的浏览器,您可以使用json2.js实现它。

正如评论中所指出的,如果您已经在使用 jQuery,那么有一个$.parseJSON函数可以映射到JSON.parse如果可用)或者在旧浏览器中使用eval的形式。但是,这会执行额外的,不必要的检查,这也是由JSON.parse执行的,所以为了获得最好的全面性能,我建议使用它,如下所示:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

这将确保您立即使用本机JSON.parse ,而不是让 jQuery 在将字符串传递给本机解析函数之前对字符串执行完整性检查。

首先,您必须确保 JSON 代码有效。

之后,如果可以的话,我建议使用 jQuery 或 Prototype 等 JavaScript 库,因为这些东西在这些库中得到了很好的处理。

另一方面,如果您不想使用库并且可以保证 JSON 对象的有效性,我只需将该字符串包装在匿名函数中并使用 eval 函数。

如果您从另一个不完全信任的源获取 JSON 对象,则不建议这样做,因为如果您愿意,eval 函数允许使用 renegade 代码。

以下是使用 eval 函数的示例:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

如果您控制正在使用的浏览器,或者您不担心使用旧浏览器的人,则可以始终使用 JSON.parse 方法。

这确实是未来的理想解决方案。

如果从外部站点获取此信息,使用 jQuery 的 getJSON 可能会有所帮助。如果它是一个列表,您可以使用 $ .each 迭代它

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});