zoukankan      html  css  js  c++  java
  • JSON的使用・小结

    JSON--JavaScript Object Notation (JavaScript对象表示法)


    初始JSON的人很容易弄混对象与JSON(我也是刚刚弄清楚 ⊙﹏⊙)。

    JSON是一种数据格式,经常有人说什么"把数据变成JSON对象然后@#¥……@¥"。
    对象不一定是JSON格式,而JSON格式的数据(以下简称JSON数据)则一定是对象(简单的数据,如1,"ABCD"都算是JSON格式,这里暂且忽略之)
    JSON格式是以key-value的形式存放数据的 如:

    {
        "name":"Rose",
        "age":25,
        "family":{
            "brother":"Who"
        }
    }

    这当中value可以是数字,字符串,数组,甚至null,但不能为undefined,function,对象实例和变量,否则该属性会被无视掉。例:

    var p = {
        "name":"Rose",
        "family":undefined,
        "age":25,
        "sex":function(){}
    }
    JSON.stringify(p);//-->'{"name":"Rose","age":25}'
    //这里的JSON.stringify是EcmaScript5提供的,JSON是一个处理JSON数据的对象(IE8+ & 其他主流浏览器)。

    JSON对象有两个方法parse()stringify();

    ①JSON.parse(str)是将字符串str转换成JSON数据.如

    JSON.parse('{"name":"Ray","age":18}')-->{"name":"Ray","age":18}

    ②JSON.stringify(json,arg2)将JSON数据序列化。

    第一个参数json是JSON数据;
    第二个参数是可选的,字符串数组或者函数。如果是数组的话则是只保留key值在数组中存在的属性;函数的话,则可以对灵活的对value进行修改。例:

    var json = {"name":"Ray","age":18,"friends":{"id":32,favorite:"TokyoHot"}}
    JSON.stringify(json,["age","id"]);//这个key仅限于第一层属性,所以"id"会被无视
    -->'{"age":18}'
    
    var json = {"name":"Ray","age":18}
    JSON.stringify(json,function(key,value){
        switch(key){
            case "name":return value.length;break;
            case "age":return +value + 10;break;
            default:return value;
        }
    });
    -->'{"name":3,"age":28}'

    ③小拓展

    通过JSON对象实现对象的深复制(因为使用了JSON对象的stringify方法,所以是有局限性的,对象中不能包含函数和对象实例)

    var a = {A:4};
    var b = JSON.parse(JSON.stringify(a));

    字符串向JSON格式转换的过程中,字符串里不能包含某些具有特殊含义的字符,否则会转换失败.例

    var str = '{"name":"NothingGo\sRight"}';
    JSON.parse(str);//这里会报错。如果是用jQuery的Ajax获取JSON的话,情况相同。

    blacklist整理入下:

    \0,\b,\n,\f,\r,
    \t,\v,\u,\v,\x


    通过使用eval转换JSON格式数据的问题

    因为JSON对象在低版本浏览器的普及度低,我们在将序列化的数据向JSON格式转换时没有用JSON对象,而是用eval和Function(这里就不讲它了)。

    eval的使用方法

    var str = '{"Name":"Ray"}';
    var json = eval("(" + str + ")");

    这里的问题所在就是,初学者很容易就写成如下格式

    var json = eval(str);

    结果就报出了令人疑惑的错误:SyntaxError: Unexpected token :
    疑惑是因为左看右看str都是正确的格式啊,而冒号也没有问题。
    其实真正的原因是使用者没有了解eval的执行机制。
    简单的说eval就相当于直接把eval中的字符串当成javascript语句执行,再把返回值赋给前面的变量。
    在js中括号括起来的部分会被强行变成表达式。即
    var json = {"Name":"Ray"}
    而大括号(最外层的)则被理解成包裹代码块的符号。也就是说只会执行大括号里面的内容。
    这就成了 var json = "Name":"Ray";毫无疑问那个冒号会引起法错误。

  • 相关阅读:
    Django项目上线的准备工作
    Centos安装MySQL5.6并重置密码
    Centos7.4下安装Python3
    Django单表查询及其方法
    thinkphp 视图模型使用分析
    thinkphp 统计某个字段不重复数 总数
    表结构相同的表,且在同一数据库 数据复制
    crontab 定时任务 每过多少分钟执行
    js event事件
    shell 验证ip
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/2762536.html
Copyright © 2011-2022 走看看