我想用 JavaScript 解析一个 JSON 字符串。响应类似于
var response = '{"result":true,"count":1}';
我怎样才能获得的值result
,并count
从这个?
我想用 JavaScript 解析一个 JSON 字符串。响应类似于
var response = '{"result":true,"count":1}';
我怎样才能获得的值result
,并count
从这个?
在 JavaScript 中解析 JSON 的标准方法是 JSON.parse()
该JSON
API 是随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.js和clarinet等第三方库,它们提供流式 JSON 解析。
jQuery 曾经有一个$.parseJSON()
函数,但它在 jQuery 3.0 中被弃用了。无论如何,在很长一段时间内,它只不过是JSON.parse()
.
警告!
这个答案源于 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 方法。
这确实是未来的理想解决方案。
如果您是从外部站点获取此信息,则使用 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
无论客户端运行什么浏览器,您都可以使用标准对象。
下面的例子将说明:
let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);
// Output: John Doe, 11