• 简谈JSON


    关于JSON,我们首先要了解的是它只是一种数据格式,不是一种编程语言,它从不属于JS,并不只有Js才使用JSON。

    1.语法

    JSON的语法,可以表示简单值,对象,数组,但它不支持变量,函数,实例对象,他就是一种表示结构化数据的格式

    (1)简单值

    最简单的JSON数据形式就是简单值,例如:5就是JSON表示数值5的方式;"Hello world"是表示字符串的方式,但在JSON中字符串必须要用双引号;此外还有布尔值,null值,但不支持undefined.

    (2)对象

    JSON对象表示对象的方式:

    {

      "name":"Tom",

      "age":18

    }

    与JS不同的是,JSON不需要声明变量,也没有分号结尾,并且对象的属性必须加双引号,属性值可以是简单值,也可以是复杂类型,因此可以这样在对象中嵌入对象

    {

      "name": "Tom",

      "age": 18,

      "friends": {

            "name": "Jerry",

            "age": 16

           }

    }

    (3)数组

    JSON数组采用的是JS中的数组字面量形式

    ["Tom",18,true]

    将数组与对象结合起来,可以构成更复杂的数据集合

    [
        {
            "name": "Tom",
            "age": 18,
            "friends":[
                "Jerry"
            ]
        },
        {
            "name": "Nancy",
            "age":16,
            "friends":[
                "Nicholas"
            ]
        },{
            "singer": "MC天佑",
            "age": "28",
            "example": [
                "一人我饮酒醉",
                "刀山火海"
            ]
        }
    ]

    2.解析与序列化

    JSON对象有两个方法:stringify()和parse(),分别用于将JS对象序列化为JSON对象和把JSON字符串解析为JS值

    var michael = {
        singer:"MC天佑",
        age:28,
        example:["一人我饮酒醉"]
    }
    var jsonText = JSON.stringify(book);

    上面这段代码就是将michael对象序列化为jsonText变量中,由于JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进,因此保存在jsonText中的字符串如下所示:

      {"singer":"MC天佑","age":28,"example":["一人我饮酒醉"]}

    这个函数还可以接受两个参数,第一个参数是一个数组或者函数,第二个函数是一个选项,表示是否在JSON中保留缩进。

    如果参数是数组,那么结果就显示只包含数组中列出的属性

    var jsonText = JSON.stringify(michael,["singer","age"]);

    结果是{"singer":"MC天佑","age":28}。

    参数是函数时,函数要接受两个参数,键值和属性值,根据键值决定如何处理要洗泪花的对象中的属性

    var jsonText = JSON.stringify(michael,function(key,value){
        switch(key){
            case "example":
                return value.join(",");
            case "age":
                return 100
            case "singer":
                return undefined;
            default:
                return value;
        }
    });

    这里的结果是{"age":100,"example":"一人我饮酒醉"},这里根据传入的键来决定结果,其中我们发现如果返回的是undefined,那就删除该属性,最后一定要提供default,返回传入的值。

    第三个参数是控制结果中的缩进和空白符,如果是一个数字,那他表示每个级别缩进的空格数,最大的所金属为10,大于10的数会自动转为10,例如要早每个级别缩进4个空格

    var jsonText = JSON.stringify(michael,null,4);

    其结果就是

    {
        "singer": "MC天佑",
        "age": 28,
        "example": [
            "一人我饮酒醉"
        ]
    }

    如果传入的是字符串,那这个字符串就会用作缩进字符

    var jsonText = JSON.stringify(michael,null,"--");

    结果返回的是

    {
    --"singer": "MC天佑",
    --"age": 28,
    --"example": [
    ----"一人我饮酒醉"
    --]
    }

    在某些情况下,我们可以给对象定义toJSON()方法,返回自身的JSON数据格式

    var michael = {
        singer:"MC天佑",
        age:28,
        example:["一人我饮酒醉"],
        toJSON:function(){
            return this.singer;
        }
    }
    var jsonText = JSON.stringify(michael);

    这里返回的结果是singer的属性值

    使用JSON.parse()就可以将JSON字符串解析为相应的JS值

    var michaelCopy = JSON.parse(jsonText);

    虽然michaeal与michaelCopy有相同的属性,但他们是两个独立的、没有任何关系的对象

  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/rongy/p/6718973.html
Copyright © 2020-2023  润新知