在JavaScript中解析JSON?

我想在JavaScript中解析JSON字符串。响应类似于

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

我怎样才能得到值resultcount呢?

1999974 次浏览

在JavaScript中解析JSON的标准方法是#0

#0 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)、Safari3. x(2009)等。或者,你可能处于一个不包括标准API的深奥JavaScript环境中。在这些情况下,使用json2.js,JSON的发明者道格拉斯·克罗克福德编写的JSON的参考实现。该库将提供JSON.parse()的实现。

当处理超大的JSON文件时,JSON.parse()可能会因为其同步性质和设计而窒息。为了解决这个问题,JSON网站建议使用第三方库,例如Oboe.js单簧管,它们提供流式JSON解析。

jQuery曾经有一个#0函数,但它在jQuery 3.0中被弃用了。无论如何,在很长一段时间里,它只不过是JSON.parse()的包装器。

不使用库,您可以使用eval-这是您唯一应该使用的时间。不过使用库更安全。

eg…

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或调用ava()来解析JSON是无稽之谈。除非你需要支持IE 7或Firefox 3.0,否则解析JSON的正确方法是JSON.parse()

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

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

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

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

下面是一个使用ava函数的示例:

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.parse(myObject)可以工作。但根据浏览器的不同,可能值得使用eval('('+myObject+')')。我建议注意的唯一问题是JSON中的多级列表。

如果您想在较旧的浏览器中使用JSON3,您可以有条件地加载它:

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

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

你可以像在其他一些答案中一样使用ava函数。(不要忘记额外的大括号。)当你深入研究时,你会知道为什么),或者简单地使用jQuery函数parseJSON

var response = '{"result":true , "count":1}';var parsedJSON = $.parseJSON(response);

您可以使用下面的代码。

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

您可以使用jsonObject.resultjsonObject.count访问字段。

更新时间:

如果您的输出是undefined,那么您需要遵循这个答案。也许您的json字符串具有数组格式。您需要像这样访问json对象属性

var response = '[{"result":true , "count":1}]'; // <~ Array with [] tagvar jsonObject = JSON.parse(response);console.log(jsonObject[0].result); //Output trueconsole.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

如果你使用jQuery,很简单:

var response = '{"result":true,"count":1}';var obj = $.parseJSON(response);alert(obj.result); //truealert(obj.count); //1

正如许多其他人所提到的,大多数浏览器都支持JSON.parseJSON.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工具包

require(["dojo/json"], function(JSON){JSON.parse('{"hello":"world"}', true);});

一个简单的方法来做到这一点:

var data = '{"result":true,"count":1}';var json = eval("[" +data+ "]")[0]; // ;)

如果您将字符串变量(格式良好的JSON字符串)传递给来自MVC@Viewpack的具有双引号, '"', 引号的JSON.parse,则需要在JSON.parse之前处理它(jsonstring

    var jsonstring = '@ViewBag.jsonstring';jsonstring = jsonstring.replace(/&quot;/g, '"');

JSON.parse()将传递给函数的任何JSON字符串转换为JSON对象。

为了更好地理解,按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{结果:true,计数:1}。

为了使用该对象,您可以将其分配给变量,假设obj

var obj = JSON.parse(response);

现在,通过使用obj和点(.)运算符,您可以访问JSON对象的属性。

尝试运行该命令

console.log(obj.result);

如果你喜欢的话

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

您可以使用(.)点通过JsonObject访问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;