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 |