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种数据类型,分别为:
1. 字符串(string):表示文本字符序列,需要用双引号(")表示。
"user": "Tom"
2. 数字(number):表示数值,包括整数和浮点数。
"age": 18, "score": 98.5
3. 布尔值(boolean):表示真或假,只有两个值:true和false。
"male": true
4. null:表示空值。
"address": null
5. 数组(array):表示一组有序的值,需要用方括号([])包裹,每个元素之间用逗号(,)分隔。
"scores": [90, 85, 95]
6. 对象(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文件是否符合要求。