当前位置: 首页 > news >正文

JSON 自学手册(图文教程)

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

开始学习:JSON 自学手册(图文教程)

JSON 语法

JSON 语法规则

在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:

对象表示为键值对

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON 键/值对

JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值:

{"firstName": "Json"}

这很容易理解,等价于这条 JavaScript 语句:

{firstName : "Json"}

JSON 与 JS 对象的关系

很多人搞不清楚 JSON 和 Js 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:

JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的

var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

JSON 和 JS 对象互转

要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

要实现从 JSON 转换为对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'

在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

和XML的比较

可读性:JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

可扩展性:XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。

编码难度;XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

解码难度:

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。

凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。

除了上述之外,JSON和XML还有另外一个很大的区别在于有效数据率。JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力。

更多精品课程:

阿里云云计算助理工程师认证(ACA)

阿里云大数据助理工程师认证(ACA)

阿里云云安全助理工程师认证(ACA)


转载于:https://juejin.im/post/5c8b5938f265da2de7139690

相关文章:

  • 周工作总结-数据迁移
  • Bootstrap3基础 navbar 导航条 简单示例
  • fio测试nvme性能
  • element ui step组件在另一侧加时间轴显示
  • Windows 下MongoDB复制集配置
  • TJOI2018Party
  • 互联网再迎来割据时代,小程序成为时代宠儿
  • Elasticsearch通关教程(一): 基础入门
  • centos6.5安装和简单实用pyenv
  • Exchange 2019 版本发布
  • 理解Linux文件系统之 inode
  • 【干货分享】dos命令大全
  • 程序员如何用思维导图高效学习Java编程
  • jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
  • 设计模式之欢迎来到设计模式世界(二)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • C++类中的特殊成员函数
  • CSS 提示工具(Tooltip)
  • egg(89)--egg之redis的发布和订阅
  • ES2017异步函数现已正式可用
  • ES6核心特性
  • Fabric架构演变之路
  • gitlab-ci配置详解(一)
  • Gradle 5.0 正式版发布
  • JSDuck 与 AngularJS 融合技巧
  • Python利用正则抓取网页内容保存到本地
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue 重置组件到初始状态
  • Zepto.js源码学习之二
  • 闭包--闭包作用之保存(一)
  • 汉诺塔算法
  • 好的网址,关于.net 4.0 ,vs 2010
  • 首页查询功能的一次实现过程
  • 提醒我喝水chrome插件开发指南
  • 自动记录MySQL慢查询快照脚本
  • nb
  • 阿里云服务器如何修改远程端口?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (31)对象的克隆
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (poj1.3.2)1791(构造法模拟)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (论文阅读30/100)Convolutional Pose Machines
  • (算法)N皇后问题
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .NET : 在VS2008中计算代码度量值
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET的数据绑定