JSON格式表达的基本格式是什么
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,也易于机器解析和生成,被广泛应用于Web开发、数据传输、配置文件等领域,它基于JavaScript的一个子集,但独立于语言,几乎所有现代编程语言都支持JSON数据的解析和生成,要JSON的表达,首先需要了解其基本格式和核心规则。
JSON的基本结构:键值对的集合
JSON数据的核心结构是键值对(Key-Value Pair),通过键(Key)来唯一标识对应的值(Value),键值对的基本格式为:
"键": 值
键必须是字符串,且必须用双引号()包围(不能用单引号);值可以是多种数据类型(见下文“数据类型”部分)。
JSON的两种主要组织形式
JSON数据通过两种形式组织键值对:对象(Object)和数组(Array),两者可以嵌套使用,构成复杂的数据结构。
对象(Object):无序的键值对集合
对象用花括号()包围,内部由多个键值对组成,键值对之间用逗号()分隔,对象中的键是唯一的,不能重复。
基本格式:
{
"键1": 值1,
"键2": 值2,
"键3": 值3
}
示例:一个用户信息的对象
{
"name": "张三",
"age": 25,
"isStudent": false,
"address": {
"city": "北京",
"district": "海淀区"
}
}
这里,"address"的值又是一个对象,体现了JSON的嵌套特性。
数组(Array):有序的值集合
数组用方括号([])包围,内部由多个值组成,值之间用逗号()分隔,数组中的值可以是任意JSON数据类型(包括对象、数组等),且允许重复。
基本格式:
[值1, 值2, 值3]
示例:一个学生列表的数组
[
{
"name": "李四",
"age": 20,
"major": "计算机科学"
},
{
"name": "王五",
"age": 22,
"major": "数据科学"
}
]
这里,数组的每个元素都是一个对象,形成“对象数组”的常见结构。
JSON支持的数据类型
JSON的值(Value)可以是以下6种基本类型,或由这些类型构成的嵌套结构:
字符串(String)
由双引号()包围的文本字符,可以包含字母、数字、符号,甚至空格。
示例:
"message": "Hello, JSON!", "code": "UTF-8"
数值(Number)
包括整数和小数,不支持八进制和十六进制(除非通过字符串表示),数值可以包含正负号、小数点、科学计数法(如5e3)。
示例:
"age": 25, "price": 99.99, "scientific": 3.14e-2
布尔值(Boolean)
仅包含两个值:true(真)和false(假),均为小写,不能加引号。
示例:
"isLogin": true, "isActive": false
null
表示“空值”或“无值”,仅有一个关键字null,小写,不加引号。
示例:
"middleName": null
对象(Object)
如前所述,用包围的键值对集合,可作为值嵌套在其他对象或数组中。
数组(Array)
如前所述,用[]包围的值集合,可作为值嵌套在其他对象或数组中。
JSON格式的核心语法规则
除了上述结构,JSON的格式需严格遵循以下规则,否则会导致解析错误:
引号必须使用双引号
所有键和字符串值必须用双引号()包围,单引号()是非法的。
错误示例:
{ 'name': "张三" } // 键使用单引号,非法
{ "name": '张三' } // 字符串值使用单引号,非法
逗号分隔元素,末尾不能有逗号
对象中的键值对、数组中的值之间用逗号()分隔,但最后一个元素不能有逗号(即不能有“ trailing comma”)。
错误示例:
{ // 对象末尾逗号,非法
"name": "张三",
"age": 25,
}
[ // 数组末尾逗号,非法
"apple",
"banana",
]
键必须是唯一的字符串
对象中的键不能重复,重复的键会导致解析时后出现的值覆盖前面的值(不同语言的解析器行为可能略有不同,但通常视为无效)。
示例:
{
"name": "张三",
"name": "李四" // 重复键,quot;name"的值为"李四"
}
值可以是任意JSON类型,但不能是函数或日期
JSON的值不支持函数(Function)、日期(Date)等复杂类型,但可以通过字符串或对象间接表示。
错误示例:
{
"sayHello": function() { console.log("Hello"); } // 函数作为值,非法
"birthday": new Date("2000-01-01") // 日期对象作为值,非法
}
正确处理方式(用字符串表示日期,用对象表示函数逻辑):
{
"birthday": "2000-01-01",
"sayHello": { "action": "console.log('Hello')" } // 用对象存储函数逻辑
}
JSON的嵌套与复杂结构
JSON的强大之处在于支持多层嵌套:对象中可以嵌套对象或数组,数组中也可以嵌套对象或其他数组,从而表示复杂的数据关系。
示例:一个包含用户、订单和商品信息的复杂JSON
{
"user": {
"id": 1001,
"name": "赵六",
"orders": [
{
"orderId": "A001",
"date": "2023-10-01",
"products": [
{ "name": "手机", "price": 2999, "quantity": 1 },
{ "name": "耳机", "price": 199, "quantity": 2 }
]
},
{
"orderId": "A002",
"date": "2023-10-05",
"products": [
{ "name": "充电器", "price": 49, "quantity": 1 }
]
}
]
}
}
这里,user是对象,包含orders数组;orders的每个元素是对象,又包含products数组;products的每个元素是对象,形成完整的嵌套结构。
JSON与JavaScript的区别
虽然JSON基于JavaScript,但两者有明确区别:
- JSON的键必须加双引号,JavaScript对象的键可以不加引号(如果键是合法的标识符)。
- JSON的值不支持函数、undefined、NaN等,JavaScript对象可以包含这些值。
- JSON末尾不能有逗号,JavaScript对象和数组末尾可以有逗号(ES5及以后版本支持)。
JSON格式的基本核心是“键值对+嵌套结构”,通过对象()和数组([])组织数据,支持字符串、数值、布尔值、null、对象、数组6种数据类型,并严格遵循双引号、逗号分隔、键唯一等语法规则,这些基本格式和规则,就能正确表达和解析JSON数据,实现不同语言、不同系统间的数据交换。



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