一、语法
JSON语法可以表示为以下三种类型:
1、简单值:使用与javascript相同的语法,可以在JSON中表示字符串("hello")、数值(5)、布尔值和null。但是不支持undefined。
2、对象:对象作为一种复杂的数据类型,表示的是一组无序的键值对。每个键值对的值可以是简单值,也可以是复杂数据类型的值。如:{"name": "jim", "age": 12}
3、数组:数组也是一种复杂的数据类型,表示一种有序的值的列表,可以通过索引访问其中的值。数组的值也可以是任意类型。
JSON不支持变量和函数。javascript字符串和JSON字符串最大的区别在于JSON字符串必须使用双引号,且JSON中的对象要求给属性加引号。
二、解析与序列化
JSON数据结构可以解析为javascript对象,XML数据结构解析为DOM对象。
JSON对象有两个方法:stringify()和parse(),这两个方法用于把javascript对象序列化为JSON字符串和把JSON字符串解析为javascript对象。例如:
三、stringify()和parse()
1、stringify()方法除了序列化对象之外,还可以接收两个参数,用于指定以不同的方式序列化对象。第一个参数是一个过滤器,可以为数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
1.1 数组
如果过滤器为数组,那么stringify()的结果只包含数组列出的属性,如:
返回的字符串为:
{"title": "profession", "edition": 3}
1.2 函数
如果过滤器为函数,传入的函数接收两个参数,属性名和属性值,函数返回的值为相应的键值,如果返回的是undefined,那么该属性会被忽略,如:
返回的结果:
{"title": "profession", "authors": "jim,tom","year": 5000}
2、parse()方法可以接收一个参数,该参数是一个函数,为了区别于stringify()的过滤函数,这个函数被称为还原函数,但实际上作用相同。如果还原函数返回undefined,那么表示结果中删除相应的键,如:
还原函数使得生成的javascript对象的releasedate属性的值为当前时间。
四、小结
JSON是一种轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON使用javascript语法的子集表示对象、数组、字符串、数值、布尔值和null。使用eval()对JSON数据结构求值存在风险,因为可能会执行一些恶意代码,因此解析JSON字符串时不建议使用eval()函数。
来源:https://www.cnblogs.com/hyqdvd/p/5183596.html