一文搞懂JSON

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据结构化地传输和存储。它由键值对组成,采用类似于JavaScript对象的格式来表示数据。JSON易于阅读和编写,并且易于解析和生成,成为广泛应用于Web应用程序和数据交换的标准格式之一。


JSON的基本数据类型

类型解释案例
字符(String)由双引号包围的Unicode字符序列"Hello, World!"
数字(Number)包括整数和浮点数42,3.14
布尔值(Boolean)表示真或假,C相关的实现库可能会用0和1表示值为true或false
空值(Null)表示空值值为null
对象(Object)由一组无序的键值对组成,键是字符串,值可以是任意的JSON数据类型。键值对之间使用逗号分隔,整个对象使用花括号{}包围

{"name": "John",

"age": 30,

"city": "New York"}

数组(Array)由一组有序的值组成,值可以是任意的JSON数据类型。值之间使用逗号分隔,整个数组使用方括号[]包围[1, 2, 3, 4, 5]

JSON的特点和优势(了解)

1.简洁和易读:JSON使用简洁的文本格式表示数据,易于阅读和编写。

2.平台无关性:JSON是一种独立于编程语言和平台的数据格式,可被多种编程语言解析和生成。

3.易于解析和生成:JSON的解析和生成相对简单,各种编程语言都提供了相应的JSON解析器和生成器。

4.支持复杂数据结构:JSON支持嵌套、复杂的数据结构,可以表示对象、数组和各种组合类型的数据。

5.与Web应用程序兼容性良好:JSON广泛用于Web应用程序中,可以轻松地与JavaScript进行交互。

JSON格式规范(重点)

1. 数据使用键值对表示,键和值之间使用冒号(:)分隔。

例如:{"name": "John", "age": 30}

2. 键使用双引号(")包围,值可以是字符串、数字、布尔值、对象、数组或null。 

例如:{"name": "John", "age": 30, "isStudent": true, "address": null}

3. 键值对之间使用逗号(,)分隔,最后一个键值对后不应有逗号。 

例如:{"name": "John", "age": 30}

4. 字符串值使用双引号(")包围,可以包含任意Unicode字符序列,特殊字符可以使用转义字符表示。 

例如:"Hello, World!", "I "love" JSON"

5. 数字可以是整数或浮点数,不使用引号包围。 

例如:42, 3.14

6. 布尔值只有两个取值:true和false,不使用引号包围。 

例如:true, false

7. 数组使用方括号([])包围,值之间使用逗号分隔。 

例如:[1, 2, 3, 4, 5]

8. 对象使用花括号({})包围,键值对之间使用逗号分隔。 

例如:{"name": "John", "age": 30}

9. JSON是严格区分大小写的,键和字符串值都应该使用双引号包围。

10. JSON可以嵌套,允许在对象中包含对象或数组,或在数组中包含对象或其他数组。

11. JSON不支持注释,不允许在JSON数据中添加注释。

下面是一个简单的JSON

{
  "name": "southernbrid",
  "age": 14,
  "gender": true,
  "height": 1.65,
  "grade": null,
  "skills": [
    "JavaScript",
    "Java",
    "Python",
    "Lisp"
  ]
}

分享个JSON格式校验网站

在线JSON校验格式化工具(Be JSON)

JSON的基本操作

JSON的基本操作通常涉及以下几个方面:

1.创建JSON对象: 可以使用编程语言提供的函数、类或库来创建JSON对象。通常,这些函数或方法接受键值对作为参数,用于指定JSON对象的属性和对应的值。

2.解析JSON字符串: 将JSON字符串解析为相应的数据结构,如对象、数组或基本数据类型。编程语言提供相应的解析函数或方法,可以将JSON字符串转换为可操作的数据对象。

3.生成JSON字符串: 将数据对象转换为JSON字符串的表示形式,以便于传输、存储或与其他系统进行交互。编程语言提供相应的函数或方法,可以将数据对象转换为符合JSON格式规范的字符串。

4.访问和修改JSON对象的属性: 通过键访问JSON对象的属性,并可以对其进行修改。可以使用编程语言提供的API来访问、读取和修改JSON对象的属性值。

5.遍历JSON数组: 遍历JSON数组中的元素,逐个访问和处理数组中的数据项。使用循环结构来遍历数组,根据索引或迭代器获取数组中的每个元素。

6.嵌套JSON操作: 处理嵌套的JSON结构,包括访问、修改和操作嵌套的对象或数组。可以使用递归、循环等方法来处理嵌套的JSON结构。

7.序列化和反序列化(重点): 将JSON对象序列化为字符串,或将JSON字符串反序列化为对象。序列化是将数据对象转换为JSON字符串,反序列化是将JSON字符串转换为数据对象。(本文主要介绍C语言的JSON库来进行序列化和反序列化)

下面是一个C库,用来完成本文教学

📎cJSON.c

https://www.yuque.com/attachments/yuque/0/2023/txt/35243076/1687951166715-b8398dec-d697-4507-b49e-1e2ea5595ce9.txt

📎cJSON.h

https://www.yuque.com/attachments/yuque/0/2023/txt/35243076/1687951166713-f66a28ef-8aaa-4fb0-8f7c-7fa49d94b608.txt


下面两篇文章也能帮助我们完成JSON序列化和JSON反序列化的操作

cJSON 使用详解_无痕眼泪的博客-CSDN博客

由于c语言中,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json。如果有对应的数据结构就方便一些, 如python中用json.loads(json)就把json字符串转变为内建的数据结构处理起来比较方便。一个重要概念:在cjson中,json对象可以是json,可以是字符串,可以是数字。。。cjson数据结构定义:#d..._cjson

https://blog.csdn.net/qq_32172673/article/details/88305781

https://www.cnblogs.com/liunianshiwei/p/6087596.html

https://www.cnblogs.com/liunianshiwei/p/6087596.html

编译注意事项

编译cJSON库时候,gcc需要增加  -lm 选项,动态链接math库。

打赏

本篇文章链接 地址:https://wmzos.com/?id=116

相关阅读

发表评论

  • jiyouzhan  发表于 2024-05-18 19:07 回复

    这篇文章写得深入浅出,让我这个小白也看懂了!

添加新评论