在JavaScript中parsingJSON?
我想在JavaScript中parsing一个JSONstring。 反应是类似的
var response = '{"result":true,"count":1}';
我怎样才能得到值的result
并从此count
?
大多数浏览器都支持ECMA-262第5版(JavaScript基于的规范JSON.parse()
中定义的JSON.parse()
)。 它的使用很简单:
var json = '{"result":true,"count":1}', obj = JSON.parse(json); alert(obj.count);
对于那些你不能使用json2.js来实现的浏览器。
如注释中所述,如果您已经在使用jQuery,则会有一个$.parseJSON
函数映射到JSON.parse
如果可用)或在较旧的浏览器中使用一种eval
forms。 但是,这会执行额外的,不必要的检查,也是由JSON.parse
执行的,所以为了获得最佳的全面性能,我推荐使用它:
var json = '{"result":true,"count":1}', obj = JSON && JSON.parse(json) || $.parseJSON(json);
这将确保您立即使用本地JSON.parse
,而不是让jQuery在将string传递给本机parsing函数之前对其进行完整性检查。
首先,你必须确保JSON代码是有效的。
之后,如果可以的话,我会推荐使用JavaScript库(如jQuery或Prototype),因为这些东西在这些库中处理得很好。
另一方面,如果你不想使用一个库,并且可以保证JSON对象的有效性,那么我会简单地将string包装在一个匿名函数中,并使用eval函数。
如果您从另一个不是完全可信的源获取JSON对象,则不推荐这样做,因为如果您愿意,eval函数允许使用叛离代码。
这是一个使用eval函数的例子:
var strJSON = '{"result":true,"count":1}'; var objJSON = eval("(function(){return " + strJSON + ";})()"); alert(objJSON.result); alert(objJSON.count);
如果您控制正在使用的浏览器,或者您并不担心使用旧浏览器的人,则始终可以使用JSON.parse方法。
这真的是未来的理想解决scheme。
如果您从外部网站获取此信息,使用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对象。
下面的例子将说明:
var jsontext = '{"name":"x","age":"11"}'; var getContact = JSON.parse(jsontext); document.write(getContact.name + ", " + getContact.age); // Output: x, 11
要么
你也可以使用eval
函数。 以下示例使用了eval
函数:
var jsontext = '{"name":"x","age":"11"}'; var getContact = eval('(' + jsontext + ')'); document.write(getContact.name + ", " + getContact.age); // Output: x, 11
由于JSON.parse
函数比eval函数更安全,执行速度更快,所以我build议您使用JSON.parse
函数。
您可以使用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
来访问这些字段。
如果你将一个stringvariables(一个格式正确的JSONstring)传递给MVC @Viewbag中的JSON.parse,那么引号就是''',你需要在JSON.parse( jsonstring
)
var jsonstring = '@ViewBag.jsonstring'; jsonstring = jsonstring.replace(/"/g, '"');
使用parse()
方法的最简单的方法是:
var response = '{"a":true,"b":1}'; var JsonObject= JSON.parse(response);
这是如何获取值的一个例子:
var myResponseResult = JsonObject.a; var myResponseCount = JsonObject.b;
如果不使用库,您可以使用eval
– 唯一的一次使用。 尽pipe使用图书馆更安全。
例如…
var response = '{"result":true , "count":1}'; var parsedJSON = eval('('+response+')'); var result=parsedJSON.result; var count=parsedJSON.count; alert('result:'+result+' count:'+count);
JSON.parse()将传递给函数的任何JSONstring转换为JSON对象。
为了更好的理解,请按F12打开浏览器的Inspect Element,然后转到控制台编写以下命令:
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}。
为了使用这个对象,你可以把它分配给variables,让我们说obj
:
var obj = JSON.parse(response);
现在通过使用obj
和点(。)运算符,您可以访问JSON对象的属性。
尝试运行该命令
console.log(obj.result);
如果你喜欢
var response = '{"result":true,"count":1}'; var JsonObject= JSON.parse(response);
您可以通过JsonObject使用(。) dot访问JSON元素:
JsonObject.result; JsonObject.count;
我认为JSON.parse(myObject)
会工作。 但取决于浏览器,可能值得使用eval('('+myObject+')')
。 我可以推荐注意的唯一问题是JSON中的多级列表。
一个简单的方法来做到这一点:
var data = '{"result":true,"count":1}'; var json = eval("[" +data+ "]")[0]; // ;)
如果你使用jQuery,很简单:
var response = '{"result":true,"count":1}'; var obj = $.parseJSON(response); alert(obj.result); //true alert(obj.count); //1
如果您使用Dojo Toolkit :
require(["dojo/json"], function(JSON){ JSON.parse('{"hello":"world"}', true); });
正如众多人所提到的,大多数浏览器都支持JSON.parse
和JSON.stringify
。
现在,我还想补充一点,如果您正在使用AngularJS (我强烈推荐),那么它还提供了您需要的function:
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的东西来提供另一种select。 请注意,AngularJS并不正式支持Internet Explorer 8(以及旧版本),尽pipe通过大多数的经验似乎工作得很好。