什么是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的基本操作
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
📎cJSON.h
下面两篇文章也能帮助我们完成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库。
42 评论