JSON入门学习笔记

JSON学习笔记

一、对JSON进行简单的介绍

1、JSON是一种数据格式,不是编程语言
2、JSON可以表示简单值、对象、以及数组

二、JSON可以表示的三种类型的数据

1、简单值

数字,字符串,布尔值,null:5,”Hello World!”,True,null等
注:字符串必须用双引号

2、对象

可以通过与JS中的对象进行对比来更加直观的了解JSON中的对象。

JS中的对象:

var person = {
    name:"xiaoming",
    age:29
};

JSON中的对象

{
    "name":"xiaoming",
    "age":29
}
3、数组

同样,可以通过对比JS中的数组能够更加直观的了解JSON中的数组。

JS中的数组:

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

JSON中的数组

[25,"hi",true]

三、JSON数据的解析

1、序列化

JSON解析为JS对象的实现方法相对于在DOM结构中查找数据较为简单。(例子)成为了Web服务开发中交换数据的事实标准。以以下JSON数据为例:

{
    {
        "title":"Thinking in Java",
        "authors":[
            "XXXX"
        ],
        "edition":4,
        "year":2011
    },
    {
        "title":"Thinking in Java",
        "authors":[
            "XXXX",
            "XXXXX",
        ],
        "edition":3,
        "year":2009
    },
    {
        "title":"Thinking in Java",
        "authors":[
            "XXXX",
            "XXXXX",
            "XXXXXX"
        ],
        "edition":2,
        "year":2008
    },
    {
        "title":"Thinking in Java",
        "authors":[
            "XXXX",
            "XXXXX",
            "XXXXXX",
            "XXXXXXX"
        ],
        "edition":1,
        "year":2007
    },
}

在解析为JS对象后,只需要一行代码就可以得到第三本书的书名:

books[2].title

而通过对DOM进行操作则需要:

document.getElementsByTagName("book")[2].getAttribute("title")
  • JSON对象有两个方法(函数):stringify()用于把JS对象序列化为JSON字符串;parse()用于把JSON字符串解析为JS的值。

  • JSON.stringify()方法把JS对象序列化为JSON字符串,然后将其保存在jsonText中,并且默认不包含任何空格字符或者缩进,所有的函数以及原型成员都会被忽略,不体现在结果中,undefined的值或者属性都会被跳过。

  • 将JSON字符串直接传给JSON.parse()就可以得到相应的JS值。

而这两个方法(函数)的具体使用方法与细节方面的问题,还请查阅详细的资料,在这里也就不进行太过详细的描述了。

2、序列化选项

JSON.stringify()除了要序列化的JS对象外,还可以接收另外两个参数:第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。

  • 过滤器(只对对象的第一层属性有效)
    如果过滤器是数组,则JSON.stringify()的结果中将只包含数组中列出的属性(类似于滤波器)。
    如果参数为函数,传入的函数接收两个参数,属性名与属性值(键值对)。属性名只能是字符串,当值不是键值对结构的值是,键名可以使空字符串。函数返回的值就是相应键的值。如果函数返回了一个undefined相应的属性就会被忽略。

  • 字符串缩进
    JSON.stringify()的最后一个参数用于控制结果中的缩进和空白字符。如果参数是一个数值,则表示的是每个级别缩进的空格数。如果参数是一个字符串而数值,则可以将字符串用作缩进的制表符。

toJSON()方法

当JSON.stringify()不满足某些对象进行自定义序列化的需求时,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。

也可以让这个方法返回undefined,若此时包含它的对象嵌入了另一个对象中,则会导致该对象的值变成null,如果包含它的对象是顶级对象,则该对象的值就是undefined。

toJSON()方法可以作为过滤器的补充,(toJSON()方法实际上是返回整个对象需要进行序列化的属性)JSON.stringify()序列化对象的顺序:

  1. 如果有toJSON()方法且能够取得有效的值,则调用该方法;否则按照默认顺序执行;
  2. 如果提供了过滤器,应用这个过滤器。传入过滤器的值是1返回的值
  3. 对2返回的每个值进行相应的序列化;
  4. 4如果提供了字符串缩进,则执行相应的格式化
3、解析选项

JSON.parse()方法除了接收要转化为对象的JSON字符串之外,还可以接收一个参数,该参数是一个函数,在每个键值对上调用。

为了区别JSON.stringify()接收的过滤函数,JSON.parse()接收的函数称为还原函数,如果还原函数返回undefined,则表示要从结果中删除相应的键,如果返回其他值,则将该值插入到结果中。在将日期字符串转换为Date对象时,经常要用到还原函数。

本文只是对JSON进行了初步的学习及了解,也没有对JSON解析工具进行描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值