zoukankan      html  css  js  c++  java
  • JSON

    简单值

    "Hello world!"

    javascript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号(单引号会导致语法错误).

    JSON对象

    1、js对象与json对象的区别
    对象字面量

    var person = {
        name:'Lucy',
        age;29
    };

    var person = {
        name:'Lucy',
        age;29
    };

    JSON

    {
        "name":"Lucy",
        "age":29
    }

    与JS的对象字面量相比,JSON对象有三个地方不一样
    1)、没有声明变量(JSON中没有变量的概念)
    2)、没有末尾的分号(因为这不是JavaScript语句,所以不需要分号)
    3)、JSON对象的属性名任何时候都必须加双引号,忘了加双引号是常见都错误,这在JSON中是必需的,属性的值可以是简单值,也可以是复杂类型(对象等)

    2、json对象有两个方法
    stringify():把js对象序列化为json字符串
    parse():json字符串解析为原生的js值。

    sringify()

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book); //{"title":"professional javascript","authors":["Nicholas"],"edition":3,"year":2011}

    把js对象序列化成一个json字符串,然后保存再jsonText中。默认情况下
    1)、JSON.stringify()输出的JSON字符串不包含任何空格字符和缩进
    2)、在序列化js对象时,所有函数及原型都会被有意忽略
    3)、值为undefined的任何属性也都会被跳过。

    var bookCopy = JSON.parse(jsonText);//{ title:"professional javascript",authors:['Nicholas'],edition:3,year:2011}

    虽然bookCopy与book具有相同都属性,但它们是两个独立的,没有任何关系的对象

    3、stringify()还可以接收第二个参数作为过滤器
    第二个参数以数组点形式传入

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book,['title','edition']);
    console.log(jsonText); //{"title":"professional javascript","edition":3}

    想改变value值,可以以函数的方式传入

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book,function(key,value){
        switch(key){
            case "authors":
                return value.join(",");
            case "year":
                return 5000;
            case "edition":
                return undefined;
            default:
                return value;
        }
    });
    console.log(jsonText);//{"title":"professional javascript","authors":"Nicholas","year":5000}

    其中键为edition,通过返回undefined删除改属性,返回undefined意味着要跳过某个属性

    4、stringify()第三个参数表示缩进
    第三个参数如果是数字

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book,['title','edition'], 4);
    console.log(jsonText);
    /*
    {
    "title": "professional javascript",
    "edition": 3
    }
    */

    第三个参数是4,表示每个级别缩进4个空格,只要传入有效的控制缩进的参数值,结果字符串就会包含换行符。(只缩进而不换行意义不大)。最大缩进空格数为10,
    所有大于10的值都会自动转换为10.
    缩进参数是字符串

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book,['title','edition'], '--');
    console.log(jsonText);
    /*
    {
    --"title": "professional javascript",
    --"edition": 3
    }
    */

    同样,缩进字符串最长不能超过10个字符长。如果长度超过10个,结果将只出现前10个字符。

    5、toJSON()方法
    stringify()还是不能满足对某些对象进行自定义序列化对需求。在这些情况下,可以给对象定义toJSON()方法

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011,
        toJSON:function(){
            return this.title;
        }
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);//"professional javascript"

    toJSON可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要
    1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。
    2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第1步返回的值(意思就是第二个参数无效)
    3)对第2步返回的每个值进行相应的序列化
    4)如果提供第三个参数,执行相应的格式化

    6、JSON.parse()方法也可以接收另一个函数,区别stringify()的替换函数(replacer),这个函数被称为还原函数

    var book = {
        title:'professional javascript',
        authors:['Nicholas'],
        edition:3,
        year:2011,
        releaseDate:new Date(2011,11,1)
    }
    var jsonText = JSON.stringify(book);
    var bookCopy = JSON.parse(jsonText,function(key,value){
        if(key == 'releaseDate'){
            return new Date(value);
        }else{
            return value
        }
    })
    console.log(bookCopy);

    JSON数组
    数组字面量

    var values = [25,'hi',true];

    JSON数组

    [25,"hi",true]

    同样,js数组和json数组的区别
    1)、没有声明变量(JSON中没有变量的概念)
    2)、没有末尾的分号(因为这不是JavaScript语句,所以不需要分号)

  • 相关阅读:
    FSBQPIDMI总线的区别
    为什么PCI-e比SATA快这么多?
    chage命令管理用户口令时效
    账户管理groupadd groupmod groupdel usermod usermod userdel
    linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
    RPM常见用法
    智力逻辑题
    Android ROM 制作教程
    智能家居项目(2):项目project框架的搭建
    5999卖999!是噱头还是颠覆
  • 原文地址:https://www.cnblogs.com/wzndkj/p/8486611.html
Copyright © 2011-2022 走看看