关于JSON

JSON三种类型值

  • 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null,但JSON不支持JavaScript中的特殊值undefined
    与JavaScript中的简单值比较区别不大
  • 对象:对象作为一种复杂数据类型,表示的是一组有序的键值对。而每个键值对中的值可以是简单值,也可以是复杂类型的值
    与JavaScript中的对象字面量对比:
    没有末尾的分号(;)
    属性必须加上双引号
    没有声明变量
  • 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数组索引来访问其中的值。数组的值也可以是任意类型:简单值、对象、数组
    与JavaScript中的数组字面量对比:
    没有末尾的分号(;)
    没有变量声明

解析与序列化

  • JSON对象:早期JSON解析器基本上使用JavaScript的eval( )函数。由于JSON是JavaScript的子集,因此eval( )函数可以解析、解释并返回对象和数组
  • ECMAScript5对机械JSON的行为进行规范,定义了全局对象JSON。主流浏览器都支持
  • 较早版本的浏览器可以使用shim:https://github.com/douglascrockford/JSON-js(基本上用不着)
  • 在旧版本的浏览器中,使用eval( )对JSON数据结构求值存在风险,有可能执行一些恶意代码。对于不能原生支持JSON解析的浏览器,应使用shim

JSON对象方法

  • stringfy( ):将一个JavaScript对象序列化为一个JSON字符创,默认情况下,JSON.stringify( )输出的JSON字符串不包含任何空格字符或缩进
    在序列化JavaScript对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。且值为undefined的任何属性也会被跳过,结果中最终都是值为有效JSON数据的实例属性
    此方法还可以另外接收两个参数:一个为过滤器,可以为数组,也可以是函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进
    如果第二个参数为数组:则只会序列化数组中与序列化对象对应的属性值
    如果第二个参数为函数:函数接收两个参数,属性名和数值值。属性名只能是字符串,且值并非键值对结构的值时,键名可以是空字符串。函数返回的值即为相应的键值,如果函数返回undefined,那么相应属性就会被忽略。在其中必须要定义默认返回值,因为一次调用此函数时传入的为空字符串,即JSON的最外层对象
    要序列化的对象中的每一个对象都要经过过滤器
    此参数可以为一个不大于10的数字或字符串,如果参数大于10则会转换为10,代表缩进几个空格。字符串直接代替缩进的位置,且智育啊设置了该参数都会自动换行
  • toJSON( ):可以为任何对象设置toJSON方法,返回任何序列化的值,它都能正常工作
    可以返回undefined
    如果包含它的对象嵌入在另一个对象中,会导致该对象的值变为null
    如果包含它的对象是顶级对象,结果就是undefined
    toJSON( )可以作为函数过滤器的补充
    对象传入JSON.stringify( )序列化该对象的顺序如下:
    1.如果存在toJSON( )方法而且能通过它取得有效的值,则调用该方法。否则按默认顺序执行序列化
    2.如果存在了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第一步返回的值
    3.对第二步返回的每一个值进行相应的序列化
    4.如果提供了第三个参数,执行相应的格式化
  • parse( ):将JSON字符串转换为JavaScript值。即使转换出的对象与其他对象具有相同的属性等,但是是两个不同的对象,所以可以用于拷贝对象去除引用。如果传递的参数不是有效的JSON值,则报错
    JSON.parse( )也接收另一个参数,次函数为函数,在每个键值对上调用,此函数也称为还原函数,接收两个参数,键、值,返回一个值
    如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值