我想在JavaScript中解析JSON字符串。响应类似于
var response = '{"result":true,"count":1}';
如何从中获取值result
和count
?
答案 0 :(得分:1923)
大多数浏览器都支持JSON.parse()
,这是在ECMA-262第5版(JavaScript所基于的规范)中定义的。它的用法很简单:
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,则有一个$.parseJSON
函数可以映射到JSON.parse
(如果可用)或某种形式的eval
在旧浏览器中。但是,这会执行额外的,不必要的检查,这些检查也由JSON.parse
执行,因此为了获得最好的全面性能,我建议使用它,如下所示:
var json = '{"result":true,"count":1}',
obj = JSON && JSON.parse(json) || $.parseJSON(json);
这将确保您立即使用本机JSON.parse
,而不是让jQuery在将字符串传递给本机解析函数之前对字符串执行完整性检查。
答案 1 :(得分:101)
首先,您必须确保JSON代码有效。
之后,如果可以的话,我建议使用jQuery或Prototype等JavaScript库,因为这些东西在这些库中得到了很好的处理。
另一方面,如果您不想使用库并且可以保证JSON对象的有效性,我只需将该字符串包装在匿名函数中并使用eval函数。
如果您从另一个不完全信任的源获取JSON对象,则不建议这样做,因为如果您愿意,eval函数允许使用renegade代码。
以下是使用eval函数的示例:
var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);
如果您控制正在使用的浏览器,或者您不担心使用旧浏览器的人,则可以始终使用JSON.parse方法。
这是未来的理想解决方案。
答案 2 :(得分:57)
如果从外部站点获取此信息,使用jQuery的getJSON可能会有所帮助。如果它是一个列表,您可以使用$ .each
迭代它$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
答案 3 :(得分:35)
如果您想对旧版浏览器使用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
对象。
答案 4 :(得分:34)
以下示例将明确说明:
var jsontext = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
OR
您还可以使用eval
功能。以下示例使用eval
函数:
var jsontext = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
由于JSON.parse
函数比eval函数更安全且执行速度更快,我建议您使用JSON.parse
函数。
答案 5 :(得分:30)
如果你将一个字符串变量(格式正确的JSON字符串)传递给MVC @Viewbag的JSON.parse,它有双引号,&#39;&#34;&#39;,作为引号,你需要处理它在JSON.parse之前(jsonstring
)
var jsonstring = '@ViewBag.jsonstring';
jsonstring = jsonstring.replace(/"/g, '"');
答案 6 :(得分:28)
您可以像使用其他答案一样使用eval功能。 (不要忘记额外的大括号。)当你深入挖掘时,你会知道为什么,或者只是使用jQuery函数parseJSON
:
var response = '{"result":true , "count":1}';
var parsedJSON = $.parseJSON(response);
OR
您可以使用以下代码。
var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);
您可以使用jsonObject.result
和jsonObject.count
访问字段。
答案 7 :(得分:25)
使用parse()
方法的最简单方法:
var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);
这是如何获取值的示例:
var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
答案 8 :(得分:21)
不使用库,您可以使用eval
- 您应该使用的唯一时间。但是使用库更安全。
...例如
var response = '{"result":true , "count":1}';
var parsedJSON = eval('('+response+')');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert('result:'+result+' count:'+count);
答案 9 :(得分:21)
JSON.parse()将传递给函数的任何JSON String转换为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));
您将输出为对象{result:true,count:1}。
为了使用该对象,您可以将其分配给变量,让我们说obj
:
var obj = JSON.parse(response);
现在,通过使用obj
和点(。)运算符,您可以访问JSON对象的属性。
尝试运行命令
console.log(obj.result);
答案 10 :(得分:19)
如果你喜欢
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
您可以使用(。)点来访问JsonObject的JSON元素:
JsonObject.result;
JsonObject.count;
答案 11 :(得分:13)
我认为JSON.parse(myObject)
会起作用。但是根据浏览器的不同,使用eval('('+myObject+')')
可能值得。我建议注意的唯一问题是JSON中的多级列表。
答案 12 :(得分:11)
一种简单的方法:
var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)
答案 13 :(得分:7)
正如其他许多人所提到的,大多数浏览器都支持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(以及旧版本),但通过经验,大部分内容似乎都能正常运行。
答案 14 :(得分:7)
如果您使用Dojo Toolkit:
require(["dojo/json"], function(JSON){
JSON.parse('{"hello":"world"}', true);
});
答案 15 :(得分:6)
如果你使用jQuery,那很简单:
var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1