最近看了《json必知必会》,做些记录。其实主要是想讲讲语法验证和一致性验证。
文末亦有书籍的相关信息(书名,作者,ISBN)。
基础知识
老司机可以跳过这段
什么是JSON。JSON是一种数据交换格式。数据交换格式是一种在不同平台间传递数据的文本格式。除JSON外,你也可能听说过XML这种数据交换格式。像XML和JSON这样的数据交换格式非常重要,我们需要它们来实现不同系统间的数据交换。
JSON是一种被许多系统用于交换数据格式的数据交换格式,但不是所有的系统都支持使用JSON来交换数据。
JSON的全称是Javascript Object Notation(Javascript对象表示法)。JSON基于Javascript对象字面量。JSON独立于编程语言(你不必先学习JS)。
当然如果你会JS,那就再好不过了。
什么是表示法
JSON Formatter & Validator
这是一个带有配置选项、能够高亮错误且UI很棒的格式化工具。经过处理的JSON会显示在两个窗口,一个用于展示JSON的树/节点结构,类似于可视化工具,另一个用于复制/粘贴格式化后的代码
-
JSON Editor Online
这是一个集验证、格式化和可视化工具于一身的JSON工具。错误提示会显示在出错的那一行。除了验证以外,还会显示解析错误的详情,右边的可视化工具使用树/节点的形式来展示JSON。
-
JSONLint
这是一个毫不花哨的JSON验证工具。简单的复制、粘贴、验证即可。也可以友好地格式化你的JSON。
以上都是语法验证工具。
一致性验证关注的是其独特的数据结构,会检测我们的数据是否包含name,breed和age等信息。它还会检测
age的值是不是数字,name的值是不是字符串,等等……
一致性验证
JSON验证器负责验证语法错误,JSON schema负责提供一致性验证。
JSON Schema(Schema意为模式),数据交换中的一种虚拟“合同”。
JSON Schema是数据接收方的第一道防线,也是数据发送方节约时间、保证数据正确的好工具。
JSON Schema可以解决以下有关一致性验证的问题
-
值的数据类型是否正确?
可以具体规定一个值是数字、字符串类型
-
是否包含数据所需要的数据?
可以具体规定哪些数据是需要的,哪些是不需要的
-
值的形式是不是我需要的?
可以指定范围、最小值和最大值
尽管JSON已经相当成熟,但JSON Schema仍在开发当中。截至2015年4月,JSON Schema最新版是草拟版本4。当然这并不意味着你现在不可以使用它,这仅仅说明了它仍旧在成长当中,且将来会做得更好。
JSON Schema使用JSON来书写,所以几步就能掌握它。
首先,需要在JSON第一个名称-值对中,声明一个schema文件。
{ "$schema": "http://json-schema.org/draft-04/schema#" }
第二个名称-值对,应该是JSON Schema文件的标题
{ "$schema": "http://json-schema.org/draft-04/schema#", "title":"cat" }
第三个名称-值对,要定义需要在JSON中包含的属性。“properties”的值实质上是我们想要的JSON的名称-值对的骨架。
{
如果想实现某些字段不能漏填,需要加上在”$schema”,”title”,”properties”后面加上第四个名称-值对,它的名称是
“required”,值为一个数组,数组中包含必填字段。
假设”name”,”age”,”declawed”是必填字段,所以把它们加入数组。”description”不是必填字段,就不应加入数组
{
例如
{
以上两个都是合法的JSON。
需要提一下的是,如果你JSON Schema中不包含”required”名称-值对,那么将不会有必填项。一个没有任何名称-值对的空JSON对象也被认为是合法的。例如
{}
也是合法的JSON。
现在还有一个问题,值的形式是不是我们所需要的?比如用户名不能超过30个字符,年龄不为负数等。
{
以上只是JSON Schema的冰山一角,JSON Schema还支持正则表达式等。
《JSON必知必会》一书还讲到了一些安全方面的问题,跨站请求伪造,注入攻击等。
有兴趣的话可以买来看看。
,