首页 文章

在JavaScript中解析JSON? [重复]

提问于
浏览
1550

这个问题在这里已有答案:

我想在JavaScript中解析JSON字符串 . 响应是这样的

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

如何从中获取值 resultcount

16 回答

  • 5

    如果你喜欢

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

    您可以通过 (.) 点访问JsonObject的JSON元素:

    JsonObject.result;
    JsonObject.count;
    
  • 5

    一个简单的方法:

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

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

  • 12

    如果您使用Dojo Toolkit

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

    大多数浏览器都支持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在将字符串传递给本机解析函数之前对字符串执行完整性检查 .

  • 20

    首先,您必须确保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方法 .

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

  • 94

    如果您想对旧版浏览器使用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 对象 .

  • 51

    如果你使用jQuery,它很简单:

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

    以下示例将明确说明:

    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函数更安全并且执行速度更快,因此我建议您使用 JSON.parse 函数 .

  • 32

    不使用库,您可以使用 eval - 您应该使用的唯一时间 . 但是使用库更安全 .

    例如...

    var response = '{"result":true , "count":1}';
    
    var parsedJSON = eval('('+response+')');
    
    var result=parsedJSON.result;
    var count=parsedJSON.count;
    
    alert('result:'+result+' count:'+count);
    
  • 26

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

  • 26

    如果你将一个字符串变量(格式正确的JSON字符串)传递给MVC @Viewbag的JSON.parse,它有双引号'"'作为引号,你需要在JSON.parse之前处理它( jsonstring

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

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

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

    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));
    

    您将获得输出为Object {result:true,count:1} .

    为了使用该对象,您可以将其分配给变量,假设为 obj

    var obj = JSON.parse(response);
    

    现在,通过使用 obj 和点( . )运算符,您可以访问JSON对象的属性 .

    尝试运行该命令

    console.log(obj.result);
    
  • 10

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

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

    这是如何获取值的示例:

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

    正如许多其他人所提到的,大多数浏览器都支持 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(以及旧版本),但通过经验,大多数内容似乎都运行良好 .

相关问题