JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,不仅在JavaScript中广泛应用,也被许多其他编程语言所支持。它具有语法简单、易于解析和生成、可读性强等特点,逐渐成为Web开发中常用的数据交换格式之一。本文将从多个方面详细解释JSON文件格式规范,帮助读者更好地了解和使用JSON。
一、语法规范
JSON文件由一系列名值对(key-value pairs)组成。每个名值对之间用逗号(,)分隔,整个文件需要用花括号({})包裹。如下是一个简单的JSON文件示例:
{
"name": "Tom",
"age": 18,
"gender": "male"
}
在JSON文件中,key通常是字符串类型,需要用双引号(")表示;value可以是字符串、数字、布尔值、数组、对象等类型。数组需要用方括号([])包裹,每个元素用逗号(,)分隔;对象同样需要用花括号({})包裹,每个名值对用逗号(,)分隔。示例如下:
{
"name": "Tom",
"age": 18,
"gender": "male",
"scores": [90, 85, 95],
"info": {
"school": "ABC University",
"major": "Computer Science"
}
}
另外,在JSON文件中,可以使用空白符(空格、制表符、换行符等)来增加代码的可读性。JSON解析器不会对空白符做任何处理。
二、数据类型
JSON文件支持6种数据类型,分别为:
- 字符串(string):表示文本字符序列,需要用双引号(")表示。
"user": "Tom"
- 数字(number):表示数值,包括整数和浮点数。
"age": 18, "score": 98.5
- 布尔值(boolean):表示真或假,只有两个值:
true
和false
。"male": true
- null:表示空值。
"address": null
- 数组(array):表示一组有序的值,需要用方括号([])包裹,每个元素之间用逗号(,)分隔。
"scores": [90, 85, 95]
- 对象(object):表示一组无序的键值对集合,需要用花括号({})包裹,每个键值对之间用逗号(,)分隔。
"info": { "school": "ABC University", "major": "Computer Science" }
三、转义字符
在字符串值中,如果要出现特殊字符(如双引号、反斜杠等),需要使用转义字符(反斜杠 \
)对其进行转义。
"message": "I am a \"good\" student."
下表列出了JSON文件中常见的转义字符:
转义字符 | 含义 |
---|---|
\\ |
转义为反斜杠 |
\" |
转义为双引号 |
\/ |
转义为斜杠 |
\b |
转义为退格符 |
\f |
转义为换页符 |
\n |
转义为换行符 |
\r |
转义为回车符 |
\t |
转义为制表符 |
四、JSONP
JSONP(JSON with Padding)是一种跨域数据交互技术,用于解决浏览器跨域访问数据的问题。JSONP的原理是通过动态创建 <script>
标签,实现跨域请求数据,并通过回调函数的方式解析返回的数据。JSONP的使用需要配合服务端进行处理。
下面是一个JSONP请求的示例:
<script>
function requestData(data) {
console.log(data);
}
var script = document.createElement('script');
script.src = 'http://example.com/api?callback=requestData';
document.body.appendChild(script);
</script>
以上代码可以实现通过JSONP方式请求 example.com
接口,返回数据后调用 requestData
函数进行处理。
五、JSON Schema
JSON Schema 是一种用于验证和描述 JSON 文件的规范。它可以用于定义 JSON 文件的结构,验证 JSON 文件是否符合规范等。 下面是一个 JSON Schema 的示例:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
},
"gender": {
"type": "string",
"enum": ["male", "female"]
},
"scores": {
"type": "array",
"items": {
"type": "integer"
}
},
"info": {
"type": "object",
"properties": {
"school": {
"type": "string"
},
"major": {
"type": "string"
}
}
}
},
"required": ["name", "age"]
}
以上 JSON Schema 定义了一个 "User" 对象,包含 "name"、"age"、"gender"、"scores" 和 "info" 等字段。其中,"name" 和 "age" 是必填项,"gender" 只能取 "male" 或 "female" 两个值,"scores" 是一个整数数组,"info" 是一个对象,其中包含 "school" 和 "major" 两个字段。通过 JSON Schema,可以方便地验证 JSON 文件是否符合要求。