当前位置: 首页 > news >正文

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" 是数字类型的键。
  • 数值 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端进行数据交换的场景使用广泛。


文章转载自:

http://PL89WWzf.rcjyc.cn
http://Eget4xrh.rcjyc.cn
http://BIaMfqda.rcjyc.cn
http://tuvYuLDb.rcjyc.cn
http://6Kg7QCIX.rcjyc.cn
http://bpuOjkq0.rcjyc.cn
http://SvjHZr6q.rcjyc.cn
http://K2zzkRmW.rcjyc.cn
http://HTwEkJqu.rcjyc.cn
http://XY40XHbA.rcjyc.cn
http://sdjfKhsA.rcjyc.cn
http://ou45IydA.rcjyc.cn
http://rDevag6z.rcjyc.cn
http://GKEEvaZ3.rcjyc.cn
http://JCzl4VCH.rcjyc.cn
http://aLRV11SQ.rcjyc.cn
http://YZJ7Fuyu.rcjyc.cn
http://jp8bEKXS.rcjyc.cn
http://040vBB2q.rcjyc.cn
http://26SNjwQO.rcjyc.cn
http://t80QT7xh.rcjyc.cn
http://debn2ArE.rcjyc.cn
http://URLmvzJ4.rcjyc.cn
http://KECSDhDs.rcjyc.cn
http://YNNpQDXn.rcjyc.cn
http://VK9uTlxx.rcjyc.cn
http://C82dfmSG.rcjyc.cn
http://YpVDo8Hw.rcjyc.cn
http://zAFmh3as.rcjyc.cn
http://VfliGn0E.rcjyc.cn
http://www.dtcms.com/a/377826.html

相关文章:

  • Bandicam 班迪录屏 -高清录屏 多语便携版(Windows)
  • OpenLayers数据源集成 -- 章节五:MVT格式驱动的现代地图渲染引擎
  • 文件上传与诉讼资料关联表设计实战
  • 一个简单的langgraph agent系统
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回2+使役+(考え方10)
  • 智慧能源管家:家庭光伏储能微网管理系统
  • 应急响应:某网站被挂非法链接
  • 构建AI智能体:二十九、Text2SQL:告别繁琐SQL!用大模型自助生成数据报表
  • 【Office 2024 LTSC 安装和使用指南】
  • Counting Towers (动态规划)
  • Linux内核崩溃时为什么会打印call trace---猝死前的死亡讯息
  • SQL嵌套查询详解:理论+实战提升查询性能
  • 硬件 (七) ARM 软中断, IMX6ULL 点灯
  • 图解网络基础篇
  • .Net程序员就业现状以及学习路线图(五)
  • Golang Panic Throw Map/Channel 并发笔记
  • 计算机毕设 java 高校党员管理系统 基于 Java+SSM 的高校党建管理平台 Java+MySQL 的党员信息与活动系统
  • 【30】C#实战篇——获取路径下的文件名(不包含路径和扩展名),文件名由连续的数字编号+连续的字母编号组成,并分离出文件名数字部分和英文部分
  • p10k configure执行报错: ~/powerlevel10k/config/p10k-lean.zsh is not readable
  • JVM堆溢出:原因、检测与优化
  • 参数规模代表什么?为什么会影响模型性能和推理速度?
  • 技术栈全面就能成为架构师吗?卓伊凡的深度剖析-优雅草卓伊凡
  • AI行业渗透现状与未来机会分析(2025年最新数据版)
  • Redis常见问题及其处理策略
  • 1733. 需要教语言的最少人数
  • 系统编程.8 存储映射和共享内存
  • Leetcode每日一练--22
  • Windows Socket简介
  • OpenHarmony网络深度揭秘:从Wi-Fi驱动到用户态socket的实战源码讲解
  • 《C++ 108好库》之2 多线程库thread,mutex,condition_variable,this_thread