Parse JSON in JavaScript?
我想用JavaScript解析一个JSON字符串。反应是这样的
1  | var response = '{"result":true,"count":1}';  | 
如何从中获取
大多数浏览器支持
1 2 3 4 5 6 7 8 9 10 11  | 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,那么有一个
1 2  | var json = '{"result":true,"count":1}', obj = JSON && JSON.parse(json) || $.parseJSON(json);  | 
这将确保立即使用本机
首先,您必须确保JSON代码是有效的。
之后,如果可以的话,我建议您使用一个JavaScript库(如jQuery或原型库),因为这些库处理得很好。
另一方面,如果您不想使用库,并且可以保证JSON对象的有效性,那么我只需将字符串包装在一个匿名函数中,并使用eval函数。
如果要从另一个不完全可信的源获取JSON对象,则不建议这样做,因为如果愿意,eval函数允许叛变代码。
下面是使用eval函数的示例:
1 2 3 4  | var strJSON = '{"result":true,"count":1}'; var objJSON = eval("(function(){return" + strJSON +";})()"); alert(objJSON.result); alert(objJSON.count);  | 
如果您控制了正在使用的浏览器,或者您不担心使用旧浏览器的人,那么您可以始终使用json.parse方法。
这确实是未来的理想解决方案。
如果您是从外部站点获得的,那么使用jquery的getjson可能会有所帮助。如果它是一个列表,您可以用$迭代它。
1 2 3 4 5 6  | $.getJSON(url, function (json) { alert(json.result); $.each(json.list, function (i, fb) { alert(fb.result); }); });  | 
如果要将JSON3用于较旧的浏览器,可以使用以下条件有条件地加载它:
1 2  |     window.JSON ||  document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');  | 
现在,无论客户机运行的是什么浏览器,都可以使用标准的
下面的示例将清楚说明:
1 2 3 4 5  | var jsontext   = '{"name":"x","age":"11"}'; var getContact = JSON.parse(jsontext); document.write(getContact.name +"," + getContact.age); // Output: x, 11  | 
或
您还可以使用
1 2 3 4 5  | var jsontext   = '{"name":"x","age":"11"}'; var getContact = eval('(' + jsontext + ')'); document.write(getContact.name +"," + getContact.age); // Output: x, 11  | 
由于
如果您将一个字符串变量(格式良好的JSON字符串)从mvc@viewbag传递给json.parse,该变量的双引号为"",则需要在json.parse(
1 2  |     var jsonstring = '@ViewBag.jsonstring'; jsonstring = jsonstring.replace(/"/g, '"');  | 
您可以像在其他答案中那样使用eval函数。(别忘了加上大括号。)当你深入挖掘时,你就会知道为什么,或者简单地使用jquery函数
1 2  | var response = '{"result":true ,"count":1}';  var parsedJSON = $.parseJSON(response);  | 
或
您可以使用下面的代码。
1 2  | var response = '{"result":true ,"count":1}'; var jsonObject = JSON.parse(response);  | 
您可以使用
使用
1 2  | var response = '{"a":true,"b":1}'; var JsonObject= JSON.parse(response);  | 
以下是如何获取值的示例:
1 2  | var myResponseResult = JsonObject.a; var myResponseCount = JsonObject.b;  | 
parse()将传递给函数的任何JSON字符串转换为JSON对象。
为了更好地理解,请按f12打开浏览器的inspect元素,然后转到控制台编写以下命令:
1 2  | var response = '{"result":true,"count":1}'; // Sample JSON object (string form) JSON.parse(response); // Converts passed string to a JSON object.  | 
现在运行命令:
1  | console.log(JSON.parse(response));  | 
您将得到输出作为对象结果:真,计数:1。
为了使用该对象,可以将它赋给变量,比如说
1  | var obj = JSON.parse(response);  | 
现在,通过使用
尝试运行命令
1  | console.log(obj.result);  | 
不使用库,您可以使用
如。。。
1 2 3 4 5 6 7 8  | var response = '{"result":true ,"count":1}'; var parsedJSON = eval('('+response+')'); var result=parsedJSON.result; var count=parsedJSON.count; alert('result:'+result+' count:'+count);  | 
如果你喜欢
1 2  | var response = '{"result":true,"count":1}'; var JsonObject= JSON.parse(response);  | 
您可以通过带(.)点的jsonObject访问json元素:
1 2  | JsonObject.result; JsonObject.count;  | 
我以为江户十一〔七〕行。但根据浏览器的不同,使用
一种简单的方法:
1 2  | var data = '{"result":true,"count":1}'; var json = eval("[" +data+"]")[0]; // ;)  | 
正如许多其他浏览器所提到的,大多数浏览器支持
现在,我还想补充一点,如果您使用的是AngularJS(我强烈推荐),那么它还提供了您需要的功能:
1 2 3  | 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并没有正式支持Internet Explorer 8(以及更旧的版本,就这点而言),尽管通过经验,大多数东西似乎都工作得很好。
如果使用Dojo工具包:
1 2 3  | require(["dojo/json"], function(JSON){ JSON.parse('{"hello":"world"}', true); });  | 
如果使用jquery,它很简单:
1 2 3 4  | var response = '{"result":true,"count":1}'; var obj = $.parseJSON(response); alert(obj.result); //true alert(obj.count); //1  |