(数据交换格式是一种在不同平台间传递数据的文本格式。)
.json
application/json
JSON 所基于的 JavaScript 对象字面量单纯指对象字面量及其属性的语法表示,而且这种属性表示方法也就是通过名称 - 值对来实现的。
json 的最外层为花括号{ },表示一个对象,而括号里面,都是由被称为名称-值对(键值对)组成。
{
"animal" : "horse"
}
上面这个就是最简单的一段 json 数据。
"animal"
,必须
上面说了,名称-值对中的名称为双引号包裹的字符串,而 json 的数据类型指的是值对的数据类型。
包括:
true,false
[]
包裹,值之间用逗号隔开。json 中的字符类型
重点要说的是字符串类型,在 JavaScript 中,使用单引号或双引号没有任何区别,但是 json 只是基于 JavaScript 对象字面量。 而在 json 中,仅允许使用双引号来包裹字符串。
另外,json 中的字符串还涉及到一个转义的问题,即解析器在解析 json 时,当读到一个双引号 " 时,就认为接下来是一个字符串文本,并且预期有另一个双引号 " 结尾,这就意味着,如果这段字符串本身含有双引号,那么就有可能会解析错误。
为了处理这个问题,我们需要 在字符串中的双引号前面加上一个反斜线字符来对其转义。
另外还有其他一些需要转义的字符:
• \(反斜线)
• /(正斜线)
• (退格符)
• f(换页符)
• (制表符)
•
(换行符)
•
(回车符)
• u后面跟十六进制字符(如笑脸表情u263A)
json 中的数字可以是整数、小数、负数或者指数。
json 中的布尔类型非常严格,仅使用小写形式:true 或 false,任何其他 形式的写法都会报错。
json 中的null类型,编程中当我们需要表示没有,不存在,空,一无所有等等意思的时候,我们不用数字0表示,而是 null ,null 是一个表示“没有值”的值。在 json 中,null 必须使用小写形式。
[]
包裹,且值与值之间用 逗号隔开。 发送方和接收方都可以使用 json Schema 来校验数据。
json Schema 也是使用 json 来书写。
一、第一个名称 - 值对中,声明其为一个 schema 文件。声明的名称必须为 "$schema",值必须为所用草拟版本的链接。
{
"$schema": "http://json-schema.org/draft-04/schema#"
}
二、 第二个名称 - 值对应该是 JSON Schema 文件的标题。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Cat"
}
三、 第三个名称值对中,要定义需要在JSON中包含的 属性。例如定义猫的属性。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Cat",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "number",
"description": "Your cat's age in years."
},
"declawed": {
"type": "boolean"
}
}
}
在第三个名称 - 值对中,我们验证了第一个问题,值的类型是否正确。
如果需要验证第二个问题--是否包含所需要的数据。就需要第四个名称 - 值对。
四、 第四个名称 - 值对,名称为 "required",值为数组,数组中包含必填的字段。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Cat",
"properties": {
"name": {
"type": "string"
}, "age": {
"type": "number",
"description": "Your cat's age in years."
},
"declawed": {
"type": "boolean"
},
"description": {
"type": "string"
}
},
"required": [
"name",
"age",
"declawed"
] }
下面是一个合法的 json:
{
"name": "Fluffy",
"age": 2,
"declawed": false,
}
注:
如果你的 json Schema 中不包含 "required" 名称-值对,那么将不会有必填项。
下面解决第三个问题:值的形式是不是我需要的?
这个可以通过对数据的格式提出更具体的要求来实现,比如设置数字的最大、最小值,字符串长度的最长最短等等。
下面是示例:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Cat",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"maxLength" : 20
},
"age": {
"type": "number",
"description": "Your cat's age in years.",
"minimum" : 0
},
"declawed": {
"type": "boolean"
},
"description": {
"type": "string"
}
},
"required": [
"name",
"age",
"declawed"
]
}
json 本身并不会造成什么安全问题,可能会出现问题的是 json 的使用。
主要是两点:
跨站请求伪造,即 CSRF(cross-site request forgery,读作 sea-surf),是一种 利用站点对用户浏览器信任而发起攻击的方式。
相关文章推荐: