JavaScript中JSON对象
来源:互联网 发布:天龙八部灵性算法 编辑:程序博客网 时间:2024/05/29 03:50
JSON对象的定义
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON语法
JSON的语法可以表示以下三种类型的值。
- 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null 。但JSON不支持JavaScript中的特殊值undefined。
- 对象:对象作为一种复杂数据类型,表示的是一组有序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
- 数组:数组也是一种复杂的数据类型,表示一组有序的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型,如简单值、对象或数组。
简单值
最简单的JSON数据形式就简单值,例如:
"Hello word";5
Javascript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号(单绰号会导致语法错误)。
布尔值和null也是有效的JSON形式。但是,在实际应用中,JSON更多地用来 表示更复杂的数据结构,而简单值只是整个数据结构中的一部分。
对象
JSON对象的表现形式如下:
{ "name": "TOM", "age": 30}
JSON对象表现形式和JavaScript中的对象字面量是有些相似,但是,有两处不一样。第一没有声明变量,第二没有末尾的分号。这里注意对象的属性必须加双引号,这是在JSON中必需的
。属性的值可以是简单值,也可以是复杂类型值;
数组
JSON中第二种复杂的数据类型就是数组,JSON数组采用的就是JavasScript中数组字面量形式。例如:
[30,"Hello",true]
同样要注意,JSON数组也没有变量和分号。把数组和对象结构起来,可以构成更复杂的数据集合,例如:
[ { "title":"JavaScript 高级编程", "price":99 }, { "title":"Java 高级编程", "price":96 }]
JSON的解析与序列化
JSON之所以流行,拥有与JavasScript类似的语法并不是全部原因,更重要的一个原因,可以把JSON数据结构解析为有用的JavasScript对象。然后以JavasScript对象的语法来访问,假设把JSON数组结构保存到book变量中:
book[0].title
支持这个JSON对象的浏览器有IE8、Firefox3.5+、Safari4+、Chrome和Opera10.5+,对于较早版本的浏览器可以使用一个第三方提供的插件
JSON对象提供两个方法
JSON.stringify()
默认情况下,JSON.stringify()输出的JSON字符串不包含任何空字符或缩进;在序列化JavasScript对象时,所有函数及原型都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被路过。
序列化选项
JSON.stringify()除了要序列化的JavasScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavasScript对象。第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。单独或组合使用这两个参数,可以更全面深入地控制JSON的序列化。
- 过滤结果
第二个参数是数组形式:
var book = [ { "title":"JavaScript 高级编程", "price":99 }, { "title":"Java 高级编程", "price":96 }];JSON.stringify(book,['title']);// "[{"title":"JavaScript 高级编程"},{"title":"Java 高级编程"}]"
第二个参数是函数
var book = [ { "title":"JavaScript 高级编程", "price":99 }, { "title":"Java 高级编程", "price":96 }];JSON.stringify(book,function(key,value){ // 过滤掉title属性及属性值 if(key =="title") { return undefined; } return value;});//"[{"price":99},{"price":96}]"
- 字符串缩进
var book = [ { "title":"JavaScript 高级编程", "price":99 }, { "title":"Java 高级编程", "price":96 }];JSON.stringify(book,null, 4);
输出结果:
[ { "title": "JavaScript 高级编程", "price": 99 }, { "title": "Java 高级编程", "price": 96 }]
注意第三个参数值最大的缩进数为10,所有大于10的值都会自动转换为10;
如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。在使用字符串的情况下,可以将缩进字符设置为制表符,或者两个短划线之类的任意字符。
缩进字符串最长不能超过10个字符长,如果超过10个,结果中将只出现前10个字符;
toJSON()方法
var book = { "title":"JavaScript 高级编程", "price":99, toJSON:function(){ return this.title; }};JSON.stringify(book);//"JavaScript 高级编程"
toJSON()可以作为函数过滤器的补充,因此理解序列化的内部十分重要。假设把一个对象传入JSON.stringify()。序列化对象的顺序如下。
- 如果存在toJSON()方法而且能通过它取得有效的值,则调用访方法,否则,按默认顺序执行序列化。
- 如果提供了第二个参数,应用 这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
- 对第(2)步返回的每个值进行相应的序列化。
- 如果提供了第三个参数,执行相应的格式化。
解析选项
JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用。这个函数被称为还原函数。
如果还原函数返回undefined,则表示要从结果中删除相应的键,如果返回其他值,则将该值插入到结果中;
var str = "{\"name\":\"TOM\",\"age\":30}";JSON.parse(str, function(key,value){ if(key =="age") { return undefined; } return value;}); // Object {name: "TOM"}
- JavaScript中JSON对象
- javascript中JSON对象使用
- 在 JavaScript 中创建 JSON 对象
- javaScript中eval()方法转换json对象
- Javascript中JSON对象继承实现
- javascript中由字符串转为json对象
- JavaScript 中为 JSON 字符串创建对象
- javascript json对象javascript
- javascript中字符串格式json如何转化成json对象
- JavaScript中json对象和string对象之间相互转化
- JavaScript中json对象和string对象之间的转化
- JavaScript中json对象和string对象之间相互转化
- JavaScript中json对象和string对象之间的转化
- JavaScript中json对象和string对象之间相互转化
- JavaScript中json对象和string对象之间的转化
- javascript中的json对象
- javascript对象转json
- JavaScript对象与JSON
- jsp注册(mysql数据库)
- 7/15
- python学习之面对对象
- N
- 堆和栈的区别(非常经典的文章)
- JavaScript中JSON对象
- 纯JSP+JDBC+MySQL生成登录注册
- 高并发之分布式
- ubuntu下利用Dlib实现目标跟踪(下)——多目标跟踪
- Sql介绍和MySql安装
- 不使用第三方变量交换两个参数的值
- AngularJS--select加载数据选中默认值
- Qt 中的配置文件Pro细节笔记
- 1.Two Sum