在JavaScript中解析JSON?

时间:2011-02-08 16:34:04

标签: javascript json parsing

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

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

如何从中获取值resultcount

16 个答案:

答案 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(/&quot;/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.resultjsonObject.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.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(以及旧版本),但通过经验,大部分内容似乎都能正常运行。

答案 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