zoukankan      html  css  js  c++  java
  • 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));
  • 相关阅读:
    C++内置类型对象之间的转换
    快速排序
    面试题7:用两个栈实现队列
    面试题6:重建二叉树
    poj 3264(线段树)
    poj 3038
    poj 并查集
    poj 1270(toposort)
    poj 2503(字符串)
    poj 3687(拓扑排序)
  • 原文地址:https://www.cnblogs.com/xiayu25/p/6869405.html
Copyright © 2011-2022 走看看