JSON 数据详解
一、json值的类型
1.简单值: 可以表示字符串,数值,布尔值,null不支持undefined(json的数值表示: 2 )
2.对象: 一组有序的键值对,每个键值对的值可以是简单值,也可以是复杂数据类型。(json的字符串:“hello world”)。json字符串与JavaScript字符串的区别,json必须用双引号。
3.数组:一组有序值的列表,数组的值可以是简单值,也可以是复杂数据类型。
不支持变量,函数,以及对象实例
二、json对象与javascript对象
区别:
//javascript对象 var obj = { name: "liu", age: 33, }; // json对象 { "name": "liu", "age": 33, }
- 没有声明变量(json中没有变量的说法)
- 没有末尾分号()
- json中属性也要加双引号
三、字符串与json对象转换
1、JSON.parse()。parse把字符串解析成原生javascript值(javascript对象);每个属性名都必须用双引号
var str = '{"name":"huangxiaojian","age":"23"}'; console.log(JSON.parse(str)); //Object { name: "huangxiaojian", age: "23" }
接收另一个参数,为区别JSON.stringify()的过滤函数(过滤器), 因而叫还原函数。如下:
var book = { title: "hello", author: [ "apple" ], year: 300, releaseDate: new Date(2016) }; var jsonText = JSON.stringify( book ) var bookCopy = JSON.parse( jsonText, function( key, value ) { if (key == "releaseDate" ) { return new Date( value ); } else { return value; } } ); console.log( bookCopy.releaseDate.getFullYear() );
以上代码book对象,有个releaseDate属性,保存Date对象,经过序列化后变成有效的JSON数据字符串,然后经过解析又在bookCopy中还原为一个Date对象,当遇到releaseDate键值时,会基于相应的值创建一个新的Date对象,结果就是bookCopy.releaseDate属性中保存一个新的Date对象。
2、JSON.stringify( object, selector, retract ) 对象,过滤器(数组或函数),保留缩进。
JSON.stringify()把json对象序列化为字符串。(忽略函数、原型)
var a = {a:1,b:2}; console.log(JSON.stringify(a)); //{"a":1,"b":2}不包含任何空格字符或缩进
3、JSON.stringify()第二个参数,过滤器为数组
过滤器:可以使数组(如果是数组,就把数组中有的属性保留),也可以是函数(如果是函数,传两个参数:属性和属性值)。
var person = { name: "liu", age: 33, eat: [ "apple" ], sex: "man" } var jsonText = JSON.stringify( person, ["eat", "age" ] ) console.log( jsonText ) //{"eat":["apple"],"age":33}
4、JSON.stringify()第二个参数为函数
函数:函数的两个参数()。switch中参数是属性名(必须字符串)。如果是undefined则忽略属性,(这个value参数是整个序列化后的对象)
特别注意,value在《javascript高级程序设计第三版》中表述和我的不同。可能是我的理解有问题,但是我测试了,结果也是序列化后的值。谁能解决了可以告诉我。(page:566~567)
var person = { "name": "liu", "age": 33, "eat": [ "apple" ], "sex": "man" } var jsonText = JSON.stringify( person, function( key, value ) { // console.log( value ) switch("eat") { case "eat": return [3,4,5,5,5].join(","); case "age": return 33; case "sex": return undefined; default: return value; } } ) console.log( jsonText ) //"3,4,5,5,5"
5、缩进,最大缩进为10。超过10 会转换为10
var person = { "name": "liu", "age": 33, "eat": [ "apple" ], "sex": "man" } var jsonText = JSON.stringify( person, null, 4 ) console.log( jsonText ) /////////////////////////结果,带有格式//////////////////// { "name": "liu", "age": 33, "eat": [ "apple" ], "sex": "man" } //特别的缩进方式 var jsonText = JSON.stringify( person, null, "---" ) console.log( jsonText ) /////////////////////////结果,带有格式//////////////////// { ---"name": "liu", ---"age": 33, ---"eat": [ ------"apple" ---], ---"sex": "man" }
6、toJSON()方法,返回自身的json数据格式。
var date = new Date() console.log( date.toJSON() ) //person自身没有json数据格式,这是错的。 var person = { "name": "liu", "age": 33, "eat": [ "apple" ], "sex": "man" } console.log( person.toJSON() )
7、为对象添加toJSON()方法,返回字符串则是字符串格式,对象则是对象格式,单个数值就是数值格式。
var person = { "name": "liu", "age": 33, "eat": [ "apple" ], "sex": "man", "toJSON": function () { return this.age } } console.log( person.toJSON() ) // 33
toJSON()可以做过滤器补充
8、假设一个对象传入JSON.stringify(),序列化该对象的顺序
- 存在toJSON()方法,且能获取有效值,则调用该方法,否则按默认顺序序列化。
- 如果提供了第二个参数,应用这个函数过滤器,传入函数过滤器的值是第1步的返回值。
- 对第2步返回的每个值进行序列化。
- 如果提供了第三个参数,执行相应的格式化。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 张学友《走过1999》2023头版蜚声环球限量编号[低速原抓WAV+CUE][1G]
- 田震《真的田震精品集》头版限量编号24K金碟[低速原抓WAV+CUE][1G]
- 林俊杰《伟大的渺小》华纳[WAV+CUE][1G]
- 谭艳《遗憾DSD》2023 [WAV+CUE][1G]
- Beyond2024《真的见证》头版限量编号MQA-UHQCD[WAV+CUE]
- 瑞鸣唱片2024-《荒城之月》SACD传统民谣[ISO]
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]