LV01-21-C语言-JSON-01-JSON简介

本文主要是C语言基础——JSON相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.2的64位版本
VMware® Workstation 17 Pro 17.6.0 build-24238078
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、JSON简介

1. 什么是JSON

JSON 全称 JavaScript Object Notation,即 JS对象简谱,是一种轻量级的数据格式。它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。

2. 优缺点

2.1 优点

(1)与 JavaScript 完美兼容:JSON 格式源自 JavaScript,因此它与 JavaScript 非常兼容,并且易于在 JavaScript 应用程序中使用。

(2)轻量级:JSON 格式非常轻量级,因此它非常适合在网络中传输大量数据。相比于 XML,它的数据量更小,传输速度更快。

(3)多语言支持:JSON 格式是一种跨语言的格式,它可以被许多不同语言的程序支持,易于解析和生成,几乎所有编程语言都支持 JSON。

(4)易于阅读和编辑:JSON 格式非常易于阅读和编写,因为它具有简单的语法和结构,格式清晰,具有良好的可读性。

2.2 缺点

(1)不支持注释: JSON 格式不支持注释,这可能使得编写和维护复杂数据时变得有些困难。

(2)无法表示二进制数据: JSON 格式无法直接表示二进制数据,这意味着它无法用于存储和传输图像、视频等二进制数据。

(3)不支持命名空间: JSON 不支持命名空间,这可能会导致不同的应用程序之间发生命名冲突。

(4)不支持DTD: JSON 不支持 DTD,这使得在验证 JSON 数据格式时不太方便。

二、语法规则

JSON 由两种数据结构组成:对象数组

Tips

  • JSON的字符串必须使用双引号" ",而不能使用单引号' '
  • JSON的值可以是字符串、数字、布尔值、null、对象或数组。
  • JSON的键必须是字符串,必须使用双引号" "
  • JSON的格式必须严格遵守规定,否则可能会导致解析错误。

1. 对象

对象(object)是由键值对组成的无序集合,键是字符串,值可以是任何类型,包括对象和数组。对象由一对花括号{ }包围,键和值之间用冒号:分隔。键值对之间用逗号,分隔。例如:

1
2
3
4
5
6
7
8
{
"list" : [
{
"name": "sumu",
"ID": 1,
}
]
}

在这个例子中,对象的键是"name""ID",对应的值是字符串、数字和字符串。

2. 数组

数组(array)是值(value)的有序集合,每个值可以是任何类型,包括对象和数组。数组由一对方括号[ ]包裹,值之间用逗号,分隔。例如:

1
[  "apple",  "banana",  "orange"]

在这个例子中,数组包含三个字符串元素:"apple""banana""orange"

3. 值

值(value)可以是花括号{ }括起来的字符串(String)、数值(Number)、布尔值(true/false)、 null、对象(Object)或者数组(Array),这些结构可以嵌套。

3.1 字符串

JSON 字符串是由双引号" "包围的 Unicode 字符序列,使用反斜杠 `` 转义。

举个例子:

1
2
3
4
{
"name": "sumu",
"father": "sumu_f"
}

在这个例子中,字符串"name""father"是由双引号" "包围的。

3.2 数字

JSON 数字可以是整数或浮点数。例如:

1
2
3
4
{
"age": 30,
"weight": 65.5
}

在这个例子中,数字"30""65.5"分别是整数和浮点数,不需要双引号" "包围。

3.3 布尔值

JSON 布尔值只有两个取值:true 和 false。如:

1
2
3
4
{
"isStudent": true,
"isEmployed": false
}

在这个例子中,布尔值"isStudent"的取值为true,布尔值"isEmployed"的取值为false,不需要双引号" "包围。

3.4 null

JSON 的 null 表示一个空值。例如:

1
2
3
{
"middleName": null
}

在这个例子中,"middleName"的值为null,不需要双引号" "包围。

4. JSON实例

4.1 复杂对象实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"id": 101,
"name": "sumu",
"is_active": true,
"roles": ["admin", "editor"],
"contact": {
"email": "sumu@example.com",
"phone": "123-4567-8900"
},
"preferences": {
"notifications": {
"email": true,
"sms": false
}
}
}

4.2 数组实例

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"name": "sumu",
"age": 28,
"skills": ["C", "Python"]
},
{
"name": "sm",
"age": 34,
"skills": ["Java", "C++"]
}
]

三、JSON 和 XML

1. 两者的比较

JSON 和 XML都是常用的数据交换格式。它们之间有什么区别呢?

  • (1)简洁性与可读性:

JSON 比 XML 更加简洁和易读。相比于 XML 的繁琐闭合标签,JSON 采用更为紧凑的表示形式,使得数据结构更清晰明了。

  • (2)解析速度与带宽占用:

JSON 的解析速度通常比 XML 更快,因为它的结构简单,不需要解析复杂的标签。此外,JSON 数据通常占用的带宽更少,有助于提高传输效率。

  • (3)数据复杂性:

XML 比 JSON 更适合描述复杂的数据类型和嵌套结构。XML 支持命名空间和多种数据格式,这使得它在处理复杂数据和配置文件时具有优势。

  • (4)注释支持:

JSON 不支持注释,这意味着在数据中不能嵌入注释说明。而 XML 则支持注释,可以在数据文档中添加解释说明,便于维护和理解。

2. 实例

下面是一个 XML 文档:

1
2
3
4
5
<book>
<title>Happy new year</title>
<author>sumu</author>
<year>2024</year>
</book>

相应的 JSON 文档如下所示:

1
2
3
4
5
{
"title": "Happy new year",
"author": "sumu",
"year": 2024
}

可以看到,JSON 比 XML 更加简洁,没有了冗余的标签和属性。

参考资料

JSON 数据格式(详解版)