cJson系列——json数据结构分析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于数据存储、Web API 传输、配置文件等领域。它的格式非常简单且易于理解,主要由 两种基本数据结构 和 六种数据类型 组成。
1. JSON 数据格式的基本构成
JSON 的数据结构主要由 对象(Object) 和 数组(Array) 组成。对象和数组可以嵌套使用,从而形成复杂的结构。
(1)对象(Object)
对象是键值对(key-value pair)的集合,表示一组相关的数据。每个键是一个字符串,而每个值可以是任意类型的 JSON 数据(包括字符串、数字、布尔值、数组、对象等)。
-
语法:对象用大括号
{}
包裹,键和值之间用冒号:
分隔,每个键值对之间用逗号,
分隔。示例:
{ "name": "Alice", "age": 25, "isStudent": false }
-
说明:
"name"
,"age"
,"isStudent"
是对象的键。"Alice"
,25
,false
是这些键对应的值。
(2)数组(Array)
数组是一组有序的值,可以包含任意数据类型(如字符串、数字、对象等)。数组中的元素是按顺序排列的,每个元素之间通过逗号 ,
分隔,数组用方括号 []
包裹。
-
语法:数组用
[]
包裹,元素之间用逗号,
分隔。示例:
{ "colors": ["red", "green", "blue"], "numbers": [1, 2, 3, 4] }
-
说明:
"colors"
是一个包含字符串元素的数组。"numbers"
是一个包含整数元素的数组。
2. JSON 数据类型
JSON 支持六种基本数据类型:字符串(String)、数字(Number)、布尔值(Boolean)、空值(Null)、对象(Object)、数组(Array)。其中,字符串、数字、布尔值、空值是基本类型,而对象和数组是复合类型。
(1)字符串(String)
-
类型描述:字符串是由双引号
"
包裹的字符序列,支持 Unicode 字符集,允许使用转义字符。 -
语法:
"string"
-
转义字符:
"
,\
,/
,b
,f
,n
,r
,t
,u
(Unicode)。示例:
{ "name": "John Doe", "message": "Hello, \"World\"!" }
"name"
和"message"
是字符串类型的键。"Hello, \"World\"!"
是包含转义字符\"
的字符串。
(2)数字(Number)
-
类型描述:数字可以是整数或浮动小数,JSON 不区分整数和浮动数字。JSON 数字类型支持负数、指数表示法(如
1e3
)、以及小数点。 -
语法:数字可以是任意的数字形式,不需要引号。
示例:
{ "age": 25, "height": 5.9, "score": 1e3 }
"age"
,"height"
,"score"
是数字类型的键。- 数值
25
、5.9
和1e3
(即1000
)是数字类型的值。
(3)布尔值(Boolean)
-
类型描述:布尔值用于表示真或假,只有两个取值:
true
和false
。 -
语法:
true
或false
示例:
{ "isActive": true, "isVerified": false }
"isActive"
和"isVerified"
是布尔类型的键,分别对应true
和false
。
(4)空值(Null)
-
类型描述:
null
表示空值或无值,用于表示某个数据项没有值或值未知。 -
语法:
null
示例:
{ "middleName": null }
"middleName"
是一个键,其对应值为null
。
(5)对象(Object)
-
类型描述:对象是一个无序的键值对集合。对象的键必须是字符串,值可以是任意类型(如数字、布尔值、对象、数组等)。
-
语法:对象用
{}
包裹,键值对之间用:
分隔。示例:
{ "person": { "firstName": "John", "lastName": "Doe" } }
"person"
是一个对象,包含两个键:firstName
和lastName
,它们的值分别是字符串"John"
和"Doe"
。
(6)数组(Array)
-
类型描述:数组是一个有序的元素集合。元素可以是任意类型的数据(如字符串、数字、对象、其他数组等)。
-
语法:数组用
[]
包裹,元素之间用,
分隔。示例:
{ "numbers": [1, 2, 3, 4], "names": ["Alice", "Bob", "Charlie"] }
"numbers"
是一个包含整数的数组。"names"
是一个包含字符串的数组。
3. JSON 示例:复杂结构
结合上述数据类型,以下是一个完整的 JSON 示例,包含对象、数组、字符串、数字、布尔值、空值等多种数据类型:
{"name": "Alice","age": 30,"isStudent": false,"address": {"street": "123 Main St","city": "Wonderland","zipcode": "12345"},"courses": [{"courseId": "CS101", "title": "Introduction to Computer Science", "credits": 3},{"courseId": "MATH202", "title": "Calculus II", "credits": 4}],"graduated": null
}
4. JSON 格式的特点
- 简洁易懂:JSON 格式的数据结构简单、直观,容易理解和使用。
- 人类可读:JSON 是一种纯文本格式,易于阅读和编辑。
- 跨平台:JSON 可以在不同平台(如 Web、嵌入式系统、IoT 等)和多种编程语言之间共享数据,支持广泛的解析和生成工具。
- 无类型约束:JSON 并不对数据的类型施加严格约束。例如,数字类型没有单独的整数和浮动小数,所有数字都是通过
Number
类型表示的。
5. JSON 的限制
- 不支持注释:JSON 格式不允许在数据中加入注释,这与 XML 等格式有所不同。
- 数据类型有限:JSON 仅支持六种基本数据类型(字符串、数字、布尔值、空值、对象、数组),不能直接表示更复杂的数据类型(如日期、时间等)。但可以通过字符串或自定义对象的方式表示这些数据。
- 无结构验证:虽然 JSON 可以通过 JSON Schema 来进行结构验证,但本身不具有强制验证功能,类似于 XML Schema 那样的验证功能较弱。
6. 总结
JSON 的数据格式非常灵活,能够满足许多应用场景的需求。它支持的六种数据类型(字符串、数字、布尔值、空值、对象、数组)使得 JSON 成为一种强大且易于使用的数据交换格式。在嵌入式设备和服务端或者APP端进行数据交换的场景使用广泛。