在 JavaScript 中解析 JSON?

IT技术 javascript json parsing
2021-01-07 16:08:31

我想用 JavaScript 解析一个 JSON 字符串。响应类似于

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

我怎样才能获得的值result,并count从这个?

6个回答

在 JavaScript 中解析 JSON 的标准方法是 JSON.parse()

JSONAPI 是随ES5 (2011)引入的,此后已在超过 99% 的市场份额浏览器和 Node.js 中实现。它的用法很简单:

const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);


唯一无法使用的情况JSON.parse()是您正在为旧浏览器编程,例如 IE 7 (2006)、IE 6 (2001)、Firefox 3 (2008)、Safari 3.x (2009) 等. 或者,您可能处于不包含标准 API 的深奥 JavaScript 环境中。在这些情况下,请使用json2.js,这是 JSON的发明者Douglas Crockford编写的 JSON 参考实现该库将提供JSON.parse().

在处理非常大的 JSON 文件时,JSON.parse()可能会因为它的同步性质和设计而窒息。为解决此问题,JSON 网站推荐使用Oboe.jsclarinet等第三方库,它们提供流式 JSON 解析。

jQuery 曾经有一个$.parseJSON()函数,但它在 jQuery 3.0 中被弃用了。无论如何,在很长一段时间内,它只不过是JSON.parse().

@Marwan:IE 8+ 支持JSON.parse(). 对于 IE 6、7 和其他较旧的浏览器,您可以使用我从我的帖子中链接到的 json2.js。或者,但不太安全,您可以使用eval.
2021-02-15 16:08:31
审阅者注意:请在允许之前彻底检查同行编辑,因为您的操作可能会对用户从答案中复制和粘贴代码造成不必要的副作用。
2021-02-15 16:08:31
除非他还需要 JSON.stringify()
2021-02-25 16:08:31
浏览器支持详细信息:我可以使用 JSON 解析吗
2021-02-27 16:08:31
没有必要先检查本机支持然后回退到 jQuery。jQuery 1.10JSON.parse首先尝试,然后是自己的实现。jQuery 2.x 直接调用JSON.parse而不检查或回退。
2021-03-02 16:08:31

警告!

这个答案源于 JavaScript 编程的古老时代,在此期间没有内置的方法来解析 JSON。这里给出的建议不再适用,而且可能很危险。从现代的角度来看,通过涉及 jQuery 或调用 eval() 来解析 JSON 是无稽之谈。除非您需要支持 IE 7 或 Firefox 3.0,否则解析 JSON 的正确方法是JSON.parse()

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

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

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

如果您从另一个并非绝对可信的来源获取 JSON 对象,则不建议这样做,因为如果您愿意, eval 函数允许使用叛徒代码。

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

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

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

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

不不不!!!使用 eval 来评估 JSON 是一个非常危险的想法。您是否 100% 确定某人不可能将他们自己的代码注入您的字符串?
2021-02-14 16:08:31
值得一提的是,没有JSON 对象这样的东西
2021-02-15 16:08:31
好人!我无法导入 JSON 库,因为它与其他库冲突
2021-03-05 16:08:31
路人注意:这是一个很好的在线工具,可以检查您的 JSON 字符串是否有效:jsonlint.com
2021-03-05 16:08:31
eval() 可以完成一项工作,但它可以编译和执行任何 Javascript 程序,因此可能存在安全问题我认为 JSON.parse() 是更好的选择。
2021-03-09 16:08:31

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

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

如果你想对旧浏览器使用JSON 3,你可以有条件地加载它:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

现在,window.JSON无论客户端运行什么浏览器,您都可以使用标准对象。

对不起; 我想你是正确的。请无视我的评论是假的。
2021-02-10 16:08:31
彼得,您的第一条评论内容丰富且有用(很高兴收到警告),只是不适用于 100% 的情况。对于稍微更稳定和更快的 CDN,您可以使用jsDelivr//cdn.jsdelivr.net/json3/latest/json3.min.js
2021-02-18 16:08:31
它是提供给您json3.min.js完成加载当它可用时,这不会给你回调。因此,您的代码今天可能可以工作,但在周三当 cdnjs.cloudflare.com 突然比平时慢或网络已加载或 10000 种其他原因之一时无法工作。RequireJS代替。
2021-02-19 16:08:31
彼得,那是不正确的。外部脚本的加载和 document.write 都是同步活动,因此所有放置在其后的脚本都会等到加载完毕后再执行。对于仅加载 JSON3,这是一个很好的方法。如果您的项目变得越来越复杂并且不得不加载具有复杂依赖关系的脚本,RequireJS 会派上用场。请记住 document.write 会阻止页面渲染,因此请将其放在标记的底部。
2021-02-21 16:08:31

下面的例子将说明:

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);

// Output: John Doe, 11
@西蒙B。谢谢,我会仔细阅读它:)
2021-02-08 16:08:31
使用eval()是危险的
2021-02-12 16:08:31
@西蒙B。你能再详细说明一下吗?
2021-02-28 16:08:31
@M.AlJumaily 请参阅softwareengineering.stackexchange.com/questions/311507 /... 并将您的问题带到下一次极客聚会上,以获得免费的热门话题。意料之中的自由格斗词。:-Z
2021-03-06 16:08:31