cJson系列——json数据结构分析

发布于:2025-09-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

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" 是数字类型的键。
  • 数值 255.91e3(即 1000)是数字类型的值。
(3)布尔值(Boolean)
  • 类型描述:布尔值用于表示真或假,只有两个取值:truefalse

  • 语法truefalse

    示例

  { "isActive": true, "isVerified": false }
  • "isActive""isVerified" 是布尔类型的键,分别对应 truefalse
(4)空值(Null)
  • 类型描述null 表示空值或无值,用于表示某个数据项没有值或值未知。

  • 语法null

    示例

  { "middleName": null }
  • "middleName" 是一个键,其对应值为 null
(5)对象(Object)
  • 类型描述:对象是一个无序的键值对集合。对象的键必须是字符串,值可以是任意类型(如数字、布尔值、对象、数组等)。

  • 语法:对象用 {} 包裹,键值对之间用 : 分隔。

    示例

    { "person": { "firstName": "John", "lastName": "Doe" } }

    • "person" 是一个对象,包含两个键:firstNamelastName,它们的值分别是字符串 "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端进行数据交换的场景使用广泛。


网站公告

今日签到

点亮在社区的每一天
去签到