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

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

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


当前回答

一种简单的方法:

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

其他回答

在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()的包装器。

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

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

这是如何获取值的示例:

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

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

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

如果您想将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 response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

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

JsonObject.result;
JsonObject.count;