JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。
终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。
道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:
number完全一致;true或false;string;null;Array表示方式——[];{ ... }表示方式。以及上面的任意组合。
并且,JSON还定死了字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""。
由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。
如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。
序列化
让我们先把小明这个对象序列化成JSON格式的字符串:
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
要输出得好看一些,可以加上参数,按缩进输出:
JSON.stringify(xiaoming, null, ' ');
结果:
{
"name": "小明",
"age": 14,
"gender": true,
"height": 1.65,
"grade": null,
"middle-school": "\"W3C\" Middle School",
"skills": [
"JavaScript",
"Java",
"Python",
"Lisp"
]
}
第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:
JSON.stringify(xiaoming, ['name', 'skills'], ' ');
结果:
{
"name": "小明",
"skills": [
"JavaScript",
"Java",
"Python",
"Lisp"
]
}
还可以传入一个函数,这样对象的每个键值对都会被函数先处理:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(xiaoming, convert, ' ');
上面的代码把所有属性值都变成大写:
{
"name": "小明",
"age": 14,
"gender": true,
"height": 1.65,
"grade": null,
"middle-school": "\"W3C\" MIDDLE SCHOOL",
"skills": [
"JAVASCRIPT",
"JAVA",
"PYTHON",
"LISP"
]
}
如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
toJSON: function () {
return { // 只输出name和age,并且改变了key:
'Name': this.name,
'Age': this.age
};
}
};
JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
反序列化
拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
JSON.parse()还可以接收一个函数,用来转换解析出的属性:
JSON.parse('{"name":"小明","age":14}', function (key, value) {
// 把number * 2:
if (key === 'name') {
return value + '同学';
}
return value;
}); // Object {name: '小明同学', age: 14}
在JavaScript中使用JSON,就是这么简单!
# JavaScript之json
# JavaScript
# json
# Json对象与Json字符串互转(4种转换方式)
# js 将json字符串转换为json对象的方法解析
# js中将字符串转换成json的三种方式
# 解析JSON对象与字符串之间的相互转换
# JS对象与JSON格式数据相互转换
# JS解析json数据并将json字符串转化为数组的实现方法
# 小明
# 道格拉斯
# 序列化
# 还可以
# 把它
# 键值
# 数据交换
# 福特
# 一个函数
# 几个
# 双引号
# 都有
# 是一种
# 让我们
# 死了
# 而在
# 它是
# 我们可以
# 水深火热
# 雅虎
相关文章:
红河网站制作公司,红河事业单位身份证如何上传?
制作农业网站的软件,比较好的农业网站推荐一下?
建站之星如何防范黑客攻击与数据泄露?
建站主机选哪家性价比最高?
Java解压缩zip - 解压缩多个文件或文件夹实例
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
建站主机如何安装配置?新手必看操作指南
相册网站制作软件,图片上的网址怎么复制?
如何通过主机屋免费建站教程十分钟搭建网站?
如何通过商城免费建站系统源码自定义网站主题?
建站主机SSH密钥生成步骤及常见问题解答?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
建站之星伪静态规则如何设置?
SQL查询语句优化的实用方法总结
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
广州美橙建站如何快速搭建多端合一网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
建站之星2.7模板快速切换与批量管理功能操作指南
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
香港网站服务器数量如何影响SEO优化效果?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
C#如何序列化对象为XML XmlSerializer用法
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站之星图片链接生成指南:自助建站与智能设计教程
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站三合一如何选?哪家性价比更高?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何选择最佳自助建站系统?快速指南解析优劣
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
宝塔新建站点为何无法访问?如何排查?
如何通过PHP快速构建高效问答网站功能?
海南网站制作公司有哪些,海口网是哪家的?
nginx修改上传文件大小限制的方法
网站制作话术技巧,网站推广做的好怎么话术?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何快速生成高效建站系统源代码?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何通过智能用户系统一键生成高效建站方案?
*请认真填写需求信息,我们会在24小时内与您取得联系。