json对象与json字符串的区别

最近糟了这个坑,同一个方法,android和ios返回的数据不一样,一个是json字符串,另一个是json对象(至于为什么后台返回的是json对象,还没找到原因,但是我看到的后台的代码是有在返回之前给我转成字符串过来的),而我把返回的结果直接拿来用JSON.parse()转成json对象,导致android正常,在ios上面报错。

等一下,有点懵,所以整理了一下资料,当作笔记。

 

问题一:什么是"JSON字符串",什么是"JSON对象",两者的区别?【借鉴的别人的定义】

1.JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样;

2.JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()他;

    // json对象
    var str1 = {"name": "jessie", "sex": "female"};

    // json字符串
    var str2 = '{"name": "jessie", "sex": "female"}';

 

问题二: 将"JSON字符串"转化为"JSON对象"的方法?

1.使用$.parseJSON(str) 依赖jquery

    var test1 = '{"name": "jessie"}';
    var obj1 = jQuery.parseJSON(test1);
    console.log(obj1.name); // jessie

ps:此种方式仅支持标准格式:var str='{ "name": "jessie" }';

 

2.JSON.parse(str)

    var test2 = '{"name": "jessie", "sex": "female"}';
    var obj2 = JSON.parse(test2);
    console.log(obj2.name); // jessie

ps:此种方式仅支持标准格式:var str='{ "name": "jessie" }';

 

3.使用eval('('+str+')');

    var test3_1 = '{"name": "jessie"}';
    var test3_2 = "{'name': 'jessie'}";
    var test3_3 = "{name: 'jessie'}";
    var obj3_1 = eval('('+test3_1+')');
    var obj3_2 = eval('('+test3_2+')');
    var obj3_3 = eval('('+test3_3+')');
    console.log(obj3_1.name);
    console.log(obj3_2.name);
    console.log(obj3_3.name);
    //console.log(JSON.parse(test3_3).name); // 报错: Uncaught SyntaxError: Unexpected token n in JSON at position 1

Eval方式可以转换以下标准和非标准格式字符串:

    var test3_1 = '{"name": "jessie"}';
    var test3_2 = "{'name': 'jessie'}";
    var test3_3 = "{name: 'jessie'}";

 

问题三:将"JSON对象"转化为"JSON字符串"的方法?

    // 使用全局方法JSON.stringify()
    var object1 = {"name": "jessie"};
    console.log(JSON.stringify(object1));

 

posted @ 2017-05-17 20:25  芒果酱-Jessie  阅读(511)  评论(0编辑  收藏  举报