提问人: 提问时间:2/9/2011 最后编辑:Taryn 更新时间:12/18/2020 访问量:2015689
在 JavaScript 中解析 JSON?[复制]
Parse JSON in JavaScript? [duplicate]
问:
我想在 JavaScript 中解析 JSON 字符串。响应类似于
var response = '{"result":true,"count":1}';
我怎样才能从中获取这些值?result
count
答:
在 JavaScript 中解析 JSON 的标准方法是 JSON.parse()
JSON
API 是在 ES5(2011 年)中引入的,此后在市场份额和 Node.js 中实现了 >99% 的浏览器。它的用法很简单:
const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);
唯一不能使用的情况是,如果你正在为一个古老的浏览器编程,如IE 7(2006),IE 6(2001),Firefox 3(2008),Safari 3.x(2009)等。或者,您可能处于不包含标准 API 的深奥 JavaScript 环境中。在这些情况下,请使用 json2.js,这是由 JSON 的发明者 Douglas Crockford 编写的 JSON 参考实现。该库将提供 的实现。JSON.parse()
JSON.parse()
在处理非常大的 JSON 文件时,可能会因为其同步性质和设计而窒息。为了解决这个问题,JSON 网站建议使用第三方库,例如 Oboe.js 和单簧管,它们提供流式 JSON 解析。JSON.parse()
jQuery 曾经有一个 $.parseJSON()
函数,但在 jQuery 3.0 中被弃用了。无论如何,在很长一段时间里,它只不过是一个包装.JSON.parse()
评论
JSON.parse()
eval
JSON.stringify()
JSON.parse
JSON.parse
如果不使用您可以使用的库 - 这是您应该使用的唯一时间。不过,使用库更安全。eval
例如...
var response = '{"result":true , "count":1}';
var parsedJSON = eval('('+response+')');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert('result:'+result+' count:'+count);
评论
警告!
这个答案源于 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 中的多级列表。JSON.parse(myObject)
eval('('+myObject+')')
评论
如果要将 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
评论
json3.min.js
完成加载后即可使用它。当它可用时,这不会给你回调。因此,您的代码今天可能有效,但在周三 cdnjs.cloudflare.com 突然比平时慢或网络加载或 10000 个其他原因之一时无法工作。改为 RequireJS。
//cdn.jsdelivr.net/json3/latest/json3.min.js
您可以像其他一些答案一样使用 eval 函数。(别忘了额外的大括号。当你深入挖掘时,你就会知道为什么),或者干脆使用 jQuery 函数:parseJSON
var response = '{"result":true , "count":1}';
var parsedJSON = $.parseJSON(response);
或
您可以使用以下代码。
var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);
您可以使用 和 访问字段。jsonObject.result
jsonObject.count
更新:
如果你的输出是,那么你需要遵循这个答案。也许你的 json 字符串有数组格式。您需要像这样访问 json 对象属性undefined
var response = '[{"result":true , "count":1}]'; // <~ Array with [] tag
var jsonObject = JSON.parse(response);
console.log(jsonObject[0].result); //Output true
console.log(jsonObject[0].count); //Output 1
评论
以下示例将清楚地表明:
let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);
// Output: John Doe, 11
评论
eval()
如果使用 jQuery,则很简单:
var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
评论
正如许多其他人所提到的,大多数浏览器都支持 和 .JSON.parse
JSON.stringify
现在,我还想补充一点,如果您使用的是 AngularJS(我强烈推荐),那么它还提供了您需要的功能:
var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)
我只是想添加有关 AngularJS 的内容以提供另一种选择。请注意,AngularJS 并不正式支持 Internet Explorer 8(以及旧版本),尽管根据经验,大多数东西似乎都运行良好。
如果您使用 Dojo Toolkit:
require(["dojo/json"], function(JSON){
JSON.parse('{"hello":"world"}', true);
});
评论
一个简单的方法:
var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
如果将字符串变量(格式正确的 JSON 字符串)从 MVC @Viewbag传递到 JSON.parse,并且该变量将双引号 '“' 作为引号,则需要在 JSON.parse (jsonstring
)
var jsonstring = '@ViewBag.jsonstring';
jsonstring = jsonstring.replace(/"/g, '"');
评论
JSON.parse() 将传递到函数中的任何 JSON 字符串转换为 JSON 对象。
为了更好地理解,请按 打开浏览器的 Inspect Element,然后转到控制台编写以下命令:F12
var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.
现在运行以下命令:
console.log(JSON.parse(response));
你将获得 Object {result: true, count: 1} 的输出。
为了使用该对象,您可以将其分配给变量,例如:obj
var obj = JSON.parse(response);
现在,通过使用 和 dot(.) 运算符,您可以访问 JSON 对象的属性。obj
尝试运行命令
console.log(obj.result);
如果你喜欢
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
您可以通过 JsonObject 使用 (.) dot 访问 JSON 元素:
JsonObject.result;
JsonObject.count;
最简单的使用方法:parse()
var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);
以下是如何获取值的示例:
var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
评论