JSON必知必会笔记(1)--前四章

在购买了新的技术书籍之后,我会快速浏览其中的教程,尝试尽快获取足够的信息以理解我现在所学的东西。我会带着以下三个基本的问题来快速浏览一本书:
(1)它是什么?
(2)我可以用它做什么?
(3)那些别有用心的人会用它做什么?

以此,本书的第1~4章,我们将会学习一些关于JSON的基础知识。首先,我会告诉你它是什么。接着我们会一步步了解它的语法,语法校验,数据类型和模式验证。

第5章会专注于研究JSON中的安全问题。我会在这里介绍客户端和服务端的概念。同时,这一章也回答了第三个问题——那些别有用心的人会用它做什么。

剩余的章节会详细介绍JSON作为数据交换格式锁扮演的种种角色。这些章节会为你解答第二个问题,即”我可以用它做什么“。

说明:本书中所有的代码都可以在(https://github.com/lindsaybassett/json)中获取。

什么是JSON

json是一种数据交换格式

我们的生活中充满了各种系统,它们所使用的语言和架构都不尽相同。而对于使用这些系统的企业组织来说,它们之间互相通信的能力又是不可或缺的。但如果每一个系统必须有一个专门针对其他系统的数据组织形式的翻译组件,那么他们之间的交流就要消耗许多时间和资源,这显然是不合理的。所以,这些系统之间也需要一种单一的数据格式,以及单一的翻译软件。
JSON就是这样一种被许多系统用于交换数据的数据交换格式。
json数据不是通过海鸥传送的,而是通过网络中的0和1这样的信号传送。翻译自然也不是人,而是系统中的一个解析器,用于将数据转换为系统可以读取的形式。

json独立于编程语言

json的全称为JavaScript Object Notation(js对象表示法)。毕竟json是源于js的一个子集,但是数据交换格式是独立于语言的,我们仍然可以在自己的系统中使用自己的语言。
可移植性,或者说再平台和系统之间传输的兼容性,是一种数据格式所要追求的重要指标。

json基于js对象字面量

字面量:指的是字面意思和其想要表达的意思是完全一致的值。
使用json来描述我现在穿的鞋子
这里写图片描述
如果将这个用json来描述鞋子的示例视为字面量,其数据类型就是对象。我们发现,这种对象的字面量将属性用一种我们直接可见(且可读)的方式展示出来。我们将这一对象的特征或者属性所采用的表示方法称为名称-值对。

json是基于js对象字面量的。注意是基于。在js中,对象里面常常包含函数。因此,我们不仅能直接使用js的对象来表示鞋子的属性,还能创建一个叫”walk“的函数。

json不会涉及到js对象字面量里的函数。json所基于的js对象字面量单纯就是指对象字面量以及其属性的语法表示。

名称-值对

在json中,名称-值对的值可以是数字、布尔值、null、数组或者是对象。json中使用冒号(:)来分隔名称和值。
注意 由于json中的名称-值对是一种对许多系统都十分友好的数据结构,而使用空格和特殊字符(即除了a~z、0~9之外的其他字符)忽略了可移植性。因为,我们说,为了获得最大的可移植性,应该尽可能避免使用空格或者是特殊字符。

不妨想象一下骑士的册封仪式,封主会用剑在受封者的左右肩各轻点一下,使他自此成为一名真正的骑士。而现在你就是这个封主,在名称-值对的两边点上花括号来使你的json成为一个对象。

json的双引号的问题

有一个小学生写了一个即将拿去验证的json:

{
    title:'This is my title.', 
    body:'This is the body.'
}  

验证后,验证器抛出了一个解析错误。他感到很困惑,说:“你看嘛,我写的没有错啊!”
作者告诉他是因为“title”和“body”的两边没有加上双引号。
小学生:但是我见过在名称的两边在名称的两边加引号和不加引号的两种json格式。
作者:没有加引号的时候,它不是一个json,而是一个js对象。
并且,在js中允许使用单引号代替双引号,但是在json中,我们仅仅使用双引号,而且对于名称-值对来说,它们是必须的。

语法验证

有许多在线工具都可以帮你格式化和验证json。
方法:在常用的搜索引擎里面搜索“json验证”

语法验证关注的是json的格式,而一致性验证关注的是其独特的数据结构。
举个例子:语法验证会检验我们的json语法是否正确(是否被花括号包裹,名称-值对是否以逗号分隔),而一致性验证会检测我们的数据中是否包含name、breed和age等信息,它还会检验age的值是不是数字,name的值是不是字符串等等。

json文件

你可能会觉得今后使用json时,仅仅能在代码中创建它并且传输到一个仅仅可以通过开发工具来查看的不可见的世界。然而,json这种数据交换格式是可以作为独立的文件存在于文件系统中的。
文件扩展名:.json

json的媒体类型

当你在传输数据的时候,需要提前告知对方数据是什么类型,这就是媒体类型。
媒体类型,也叫互联网媒体类型、内容类型、MIME类型,它使用“l类型/子类型”这种格式来表示。比如text/html

json的MIME类型是application/json

数据类型简介

提前了解并学会使用一件事物是很有效的,无论是在计算世界里,还是在现实世界里。

原始数据类型

原始数据类型如整型、字符和字符串、布尔类型…在不同的编程语言中,这一类一成不变的数据类型叫做原始数据类型或者是内置类型。这意味着它们的定义和操作都是不能修改的。

复合数据类型

除了原始数据类型,大多数编程语言还有许多其他的类型,比如复合数据类型。如果我们拆开复合数据类型的数据结构,就会发现它们是由原始数据类型所构成的。

枚举数据类型

枚举数据类型是复合数据类型,就是一个可以枚举的数据结构。我们可以把这一结构中的东西一个一个拿出来,并且可以计算出它们的总数。
举栗子:让我们来枚举你的优良品德:

[
'witty',
'charming',
'brave',
'bold'
]
对象数据类型

另外一种复合数据类型就是对象数据类型。如上文说提到的描述我的鞋子。

json中的数据类型

json基于对象字面量以及对象数据类型。
记住!复合数据类型的数据结构可以被解构为原始数据类型。即使是对于那些不支持数据类型的语言来说,一旦解构为原生类型就很好处理了。

json中的布尔类型

在json中,该字面值仅仅用小写形式:true或者是false,任何其他的写法都会报错。

json中的null

null是一个没有值的值,在json中,null必须使用小写形式。

json schema

在大多数情况下,数据交换格式中的数据通过互联网或者其他网络传输到接收方。而接受方会对数据文件的格式,包括其结构和数据类型有一个预期。所以,接收方通常会提供一个文档来解释预期的格式并且提供示例。
json schema是数据交换中的一种虚拟的“合同”。是数据接收方的第一道防线,也是数据发送方节约时间,保证数据正确性的好工具。
json验证器负责校验语法错误,json schema负责提供一致性检验。

json shema可以解决下列有关一致性的问题:
(1)值的数据类型是否正确?
(2)是否包含所需要的数据?
(3)值的形式是不是我所需要的?
现在有许多针对具体编程语言和框架的json schema库项目,并且还在增加。如果你想在项目中使用,那么搜索“JSON Schema 验证[这里输入具体的编程语言的名称]”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值