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

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

如何从中获取值结果和计数?


在JavaScript中解析JSON的标准方法是JSON.parse()

JSON API是在ES5(2011)中引入的,目前已在超过99%的浏览器(按市场份额)和Node.js中实现。它的用法很简单:

const json=“{”水果“:”菠萝“,”手指“:10}”;const obj=JSON.parse(JSON);控制台日志(obj.fruit,obj.fingers);


唯一一次不能使用JSON.parse()的情况是,如果您正在为古老的浏览器进行编程,例如IE 7(2006)、IE 6(2001)、Firefox 3(2008)、Safari 3.x(2009)等。或者,您可能处于一个不包含标准API的深奥JavaScript环境中。在这些情况下,使用JSON的发明人Douglas Crockford编写的JSON参考实现json2.js。该库将提供JSON.parse()的实现。

当处理非常大的JSON文件时,JSON.parse()可能会因其同步特性和设计而窒息。为了解决这个问题,JSON网站推荐使用Oboe.js和clarinet等第三方库,它们提供流式JSON解析。

jQuery曾经有一个$.parseJSON()函数,但在jQuery 3.0中已弃用。无论如何,在很长一段时间里,它只是JSON.parse()的包装器。


在不使用库的情况下,您可以使用eval,这是您应该使用的唯一时间。不过使用图书馆更安全。

如。。。

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

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);

警告!这个答案源于一个古老的JavaScript编程时代,在这个时代,没有内置的方法来解析JSON。这里给出的建议不再适用,可能很危险。从现代角度来看,通过jQuery或调用eval()来解析JSON是无稽之谈。除非您需要支持IE 7或Firefox 3.0,否则解析JSON的正确方法是JSON.parse()。

首先,您必须确保JSON代码有效。

之后,如果可以的话,我建议使用jQuery或Prototype之类的JavaScript库,因为这些库处理得很好。

另一方面,如果您不想使用库并且可以保证JSON对象的有效性,我只需将字符串包装在匿名函数中并使用eval函数。

如果您从另一个不完全可信的源获取JSON对象,则不建议这样做,因为如果您愿意,eval函数允许使用背叛代码。

下面是使用eval函数的示例:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

如果您控制正在使用的浏览器,或者您不担心使用旧浏览器的人,那么您可以始终使用JSON.parse方法。

这确实是未来的理想解决方案。


如果您是从外部站点获取此信息,那么使用jQuery的getJSON可能会有所帮助。如果它是一个列表,你可以用$.each遍历它

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

我认为JSON.parse(myObject)可以工作。但根据浏览器的不同,它可能值得使用eval('('+myObject+')')。我唯一建议注意的问题是JSON中的多级列表。


如果您想将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对象。


您可以像在其他答案中一样使用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访问这些字段。

更新:

如果输出未定义,则需要遵循此答案。也许您的json字符串具有数组格式。您需要像这样访问json对象财产

var response = '[{"result":true , "count":1}]'; // <~ Array with [] tag
var jsonObject = JSON.parse(response);
console.log(jsonObject[0].result); //Output true
console.log(jsonObject[0].count); //Output 1

以下示例将明确说明:

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);

// Output: John Doe, 11

如果使用jQuery,它很简单:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1

正如许多其他人提到的,大多数浏览器都支持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并不正式支持InternetExplorer8(以及更旧版本),尽管根据经验,大多数功能似乎都很好。


如果使用DojoToolkit:

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});

一种简单的方法:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)

如果从MVC@Viewbag向JSON.parse传递一个字符串变量(格式良好的JSON字符串),该变量包含双引号“”作为引号,则需要在JSON.pase(jsonsring)之前处理它

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  

JSON.parse()将传递给函数的任何JSON字符串转换为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和dot(.)操作符,您可以访问JSON对象的财产。

尝试运行命令

console.log(obj.result);

如果你愿意

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

您可以通过JsonObject使用(.)dot访问JSON元素:

JsonObject.result;
JsonObject.count;

使用parse()方法的最简单方法:

var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);

这是如何获取值的示例:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;