JSON文件格式详解:从结构到实例
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,因其易读、易解析、与语言无关的特性,成为Web开发中数据存储与传输的主流格式之一,无论是前端与后端的数据交互、配置文件编写,还是API接口返回,JSON都无处不在,本文将从JSON的基本结构、核心规则、常见格式以及实际应用场景出发,详细解析“JSON文件是怎么格式的”。
JSON的基本结构:两大核心对象类型
JSON文件的本质是一个文本文件(扩展名通常为.json遵循特定的语法规则,核心由两种结构组成:对象(Object)和数组(Array),所有数据都通过这两种结构嵌套组合,形成层次化的数据表示。
对象(Object):键值对的集合
对象在JSON中用花括号 表示,内部由键(Key)和值(Value)成对组成,键值对之间用英文逗号 分隔,键必须是字符串(需用双引号 包裹),值可以是多种数据类型(见下文“数据类型”部分)。
基本语法:
{
"键1": "值1",
"键2": 值2,
"键3": {
"嵌套键": "嵌套值"
}
}
示例:表示一个用户信息对象
{
"name": "张三",
"age": 25,
"isStudent": false,
"address": {
"city": "北京",
"district": "海淀区"
}
}
数组(Array):有序值的集合
数组在JSON中用方括号 [] 表示,内部是值的有序列表,值之间用英文逗号 分隔,数组的值可以是任意数据类型(包括对象、数组等),支持重复值。
基本语法:
[
值1,
值2,
{
"键": "嵌套对象值"
},
[嵌套数组值1, 嵌套数组值2]
]
示例:表示用户的朋友列表(数组包含对象)
{
"name": "张三",
"friends": [
{
"name": "李四",
"age": 24
},
{
"name": "王五",
"age": 26
}
]
}
JSON的核心语法规则:必须遵守的“铁律”
JSON的格式严格,任何语法错误都可能导致解析失败,以下是必须的核心规则:
键必须是字符串,且必须用双引号包裹
JSON中的键(对象的属性名)必须是字符串类型,且必须用双引号 包裹(不能用单引号 或不带引号)。
✅ 正确示例:"name": "张三"
❌ 错误示例:'name': "张三"(单引号)、name: "张三"(无引号)
值的数据类型有限,需严格匹配
JSON支持的值(Value)类型包括6种,不允许自定义类型或其他语言特有类型(如JavaScript的undefined、Python的None等):
| 数据类型 | 示例 | 说明 |
|---|---|---|
| 字符串(String) | "hello"、"北京" |
必须用双引号包裹,支持转义字符(如\n换行、\"引号、\\反斜杠等) |
| 数字(Number) | 25、14、-10 |
整数或浮点数,不支持科学计数法(如1e3)或前导/后导零(如01、) |
| 布尔值(Boolean) | true、false |
全小写,不能是True、False(Python风格)或1/0 |
| 空值(Null) | null |
表示空值,相当于Python的None、Java的null |
| 对象(Object) | {"key": "value"} |
用花括号包裹的键值对集合 |
| 数组(Array) | [1, 2, "a"] |
用方括号包裹的有序值列表 |
逗号的使用:不能“尾随逗号”
JSON中,键值对之间、数组元素之间、不同结构之间用英文逗号 分隔,但最后一个元素后不能加逗号(即“尾随逗号”),否则会报错。
✅ 正确示例:
{
"a": 1,
"b": 2
}
[1, 2, 3]
❌ 错误示例(尾随逗号):
{
"a": 1,
"b": 2, // 最后一个键值对后有多余逗号
}
[1, 2, 3,] // 最后一个元素后有多余逗号
嵌套结构:支持无限层级的对象与数组
JSON允许对象中嵌套对象、数组中嵌套数组,或对象与数组相互嵌套,形成复杂的数据结构,层级深度取决于实际需求,但需注意可读性。
示例:三层嵌套
{
"school": "清华大学",
"departments": [
{
"name": "计算机系",
"students": [
{"id": "001", "name": "赵六", "grade": 90},
{"id": "002", "name": "钱七", "grade": 85}
]
},
{
"name": "物理系",
"students": [
{"id": "003", "name": "孙八", "grade": 88}
]
}
]
}
编码与空白:仅支持UTF-8,空白字符不影响解析
JSON文件必须使用UTF-8编码(支持中文等多语言字符),且对空白字符(空格、换行、缩进)不敏感——可以通过缩进提升可读性,但解析时会自动忽略。
✅ 可读性优化(带缩进和换行):
{
"name": "张三",
"hobbies": [
"reading",
"swimming",
"coding"
]
}
✅ 紧凑格式(无缩进,解析结果相同):
{"name":"张三","hobbies":["reading","swimming","coding"]}
常见JSON文件格式示例
实际应用中,JSON文件根据用途不同,格式也有所差异,以下是几种典型场景的示例:
配置文件(如config.json)
用于存储应用程序的配置参数,结构相对简单,以键值对为主。
{
"database": {
"host": "localhost",
"port": 3306,
"username": "root",
"password": "123456"
},
"server": {
"port": 8080,
"debug": true
},
"logging": {
"level": "info",
"file": "app.log"
}
}
API响应数据(如用户列表接口)
后端API返回的JSON数据通常包含状态码、数据主体和分页信息。
{
"code": 200,
"message": "success",
"data": {
"users": [
{
"id": 1001,
"nickname": "用户A",
"avatar": "https://example.com/avatar1.jpg",
"registerTime": "2023-01-15T08:30:00Z"
},
{
"id": 1002,
"nickname": "用户B",
"avatar": "https://example.com/avatar2.jpg",
"registerTime": "2023-02-20T14:45:00Z"
}
],
"total": 2,
"page": 1,
"pageSize": 10
}
}
数据导出文件(如export.json)
用于导出结构化数据(如表格、日志),常为数组格式,每个元素代表一条记录。
[
{
"orderNo": "ORD20231001001",
"customer": "王五",
"amount": 299.00,
"status": "completed",
"orderTime": "2023-10-01 10:30:00"


还没有评论,来说两句吧...