在国际网站做外贸需要条件,做报名链接的网站,大连虚拟主机,wordpress 成绩管理简介#xff1a; JSON#xff08;JavaScript Object Notation#xff09;是一种轻量级的数据交换格式。它基于JavaScript的一个子集#xff0c;但是JSON是独立于语言的#xff0c;这意味着尽管JSON是由JavaScript语法衍生出来的#xff0c;它可以被任何编程语言读取和生成…简介 JSONJavaScript Object Notation是一种轻量级的数据交换格式。它基于JavaScript的一个子集但是JSON是独立于语言的这意味着尽管JSON是由JavaScript语法衍生出来的它可以被任何编程语言读取和生成。JSON的设计目的是使数据交换既简单又快速相对于其他数据交换格式如XMLJSON更加轻巧这使得它在网络上传输更加高效。对于人类和机器来说JSON文本的格式都是易于理解的。 管JSON源于JavaScript但是几乎所有的编程语言都有解析JSON的库这使得JSON成为跨平台和语言的数据交换的理想格式。 一、什么是json JSONJavaScript Object Notation是一种轻量级的数据交换格式。它基于JavaScript的一个子集但是JSON是独立于语言的这意味着尽管JSON是由JavaScript语法衍生出来的它可以被任何编程语言读取和生成。JSON的设计目的是使数据交换既简单又快速。
1.1 JSON的特点 1. 轻量级相对于其他数据交换格式如XMLJSON更加轻巧这使得它在网络上传输更加高效。 2. 易于阅读和编写对于人类和机器来说JSON文本的格式都是易于理解的。 3. 语言无关性尽管JSON源于JavaScript但是几乎所有的编程语言都有解析JSON的库这使得JSON成为跨平台和语言的数据交换的理想格式。
1.2 JSON的结构 1. 键值对集合在其他语言中可能被实现为对象记录结构字典哈希表有名列表或者关联数组。在JSON中它们被表示为一个由花括号包围的对象。每个键值对由一个键字符串和一个值组成键值之间用冒号分隔键值对之间用逗号分隔。 2. 有序的值列表在大多数语言中被实现为数组。在JSON中它们被表示为由方括号包围的数组数组的元素之间用逗号分隔。
一个简单的JSON对象示例
{name: John Doe,age: 30,isEmployed: true,address: {street: 123 Main St,city: Anytown},phoneNumbers: [123-456-7890,987-654-3210]
} 在这个例子中我们有一个包含五个键值对的JSON对象。name、age和isEmployed键对应的值是简单的数据类型字符串、数字和布尔值。address键对应的值是一个嵌套的JSON对象而phoneNumbers键对应的值是一个包含字符串的JSON数组。
1.3 基本元素
JSONJavaScript Object Notation的语法规则相对简单主要包括以下几个基本元素 1.对象Object用花括号 {} 表示包含一组无序的键值对。每个键值对之间用逗号分隔。键必须是字符串值可以是任意有效的 JSON 数据类型。 {key1: value1,key2: value2,key3: value3} 2. 数组Array用方括号 [] 表示包含一组有序的值。每个值之间用逗号分隔。数组中的值可以是任意有效的 JSON 数据类型。 {arrayKey: [1, 2, 3, 4]}3. 值Value可以是字符串、数字、布尔值、对象、数组或 null。这些值可以嵌套在对象或数组中。 {stringKey: Hello, JSON!,numberKey: 42,booleanKey: true,nullKey: null,objectKey: {nestedKey: nestedValue},arrayKey: [1, two, false, null]} 4. 字符串String: 字符串在JSON中是由双引号 包围的一系列Unicode字符。字符串用于表示文本数据。
{name: John Doe,city: New York} 5. 数字Number: 数字可以是整数或者浮点数直接写出不需要加引号。JSON中的数字和大多数编程语言中的表示方法相似。 {integer: 12,float: 3.14} 6. 布尔值Boolean: 布尔值表示逻辑实体只有两个值真true或假false不需要加引号。 {isTrue: true,isFalse: false} 7. null: null 在JSON中表示空值或不存在的值。它没有引号。 {emptyValue: null}具体示例
{name: John Doe,age: 30,isEmployed: true,address: {street: 123 Main St,city: Anytown},phoneNumbers: [123-456-7890,987-654-3210]
}
在这个示例中 name、age 和 isEmployed 是简单的键值对值分别是字符串、数字和布尔值。 address 是一个嵌套的对象包含 street 和 city 两个键值对。 phoneNumbers 是一个数组包含两个字符串值。 JSON 的简洁和易读特性使它成为数据交换和配置文件的理想选择。无论是前后端数据传递还是存储配置JSON 都非常适用。
一个更加复杂的jsont.weather.itboy.net/api/weather/city/101010100
1.4 使用场景 Web开发JSON广泛用于前后端之间的数据交换。 配置文件许多应用程序使用JSON格式来存储配置设置。 API和Web服务许多Web服务使用JSON格式来提供公共API因为它易于被不同的编程语言读取和解析。
由于其简洁、易于理解的结构JSON已成为Web应用和服务之间交换数据的事实标准。 二、下载json
下载链接GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C 解压后得到这俩个文件 我们需要将这俩个文件加入到vscode中的C程序文件夹中 三、创建一个json
以下是一个使用 cJSON 创建一个JSON对象的示例代码
#include stdio.h
#include stdlib.h
#include cJSON.h
int main()
{// 创建一个新的JSON对象cJSON *root cJSON_CreateObject();// 向根对象中添加一个名为key1的键值对值为字符串10cJSON* key1 cJSON_AddStringToObject(root,key1,10);if(key1 ! NULL){printf(key:%s value :%s\n,key1-string,key1-valuestring);}// 将JSON对象转换为字符串格式char *str cJSON_Print(root); //输出json字符串// 打印转换后的JSON字符串printf(str);// 释放转换成字符串所使用的内存free(str);// 暂停程序运行以便查看控制台输出system(pause0);system(pause0);return 0;
} 在这个代码中我们创建了一个空的JSON对象 root 3.1 创建json对象 // 创建一个新的JSON对象cJSON *root cJSON_CreateObject(); cJSON_CreateObject 函数这是 cJSON 库中用来创建一个新的JSON对象的函数。cJSON 是一个在C语言中处理JSON数据的轻量级库。
如果您想使用这个库来创建一个JSON对象您可以按照以下步骤进行 1. 首先确保已经安装了 cJSON 库。 2. 在C语言代码中包含 cJSON 的头文件。 3. 使用 cJSON_CreateObject 函数来创建一个新的JSON对象。 3.2 cjson的类型详解
cjson结构体如下定义
/* cJSON 结构体: */
typedef struct cJSON
{/* next/prev 允许你在数组/对象链中遍历。或者使用 GetArraySize/GetArrayItem/GetObjectItem */struct cJSON *next;struct cJSON *prev;/* 数组或对象项将有一个子指针指向数组/对象中的项链。 */struct cJSON *child;/* 项的类型如上所述。 */int type;/* 项的字符串如果 typecJSON_String 和 type cJSON_Raw */char *valuestring;/* 写入 valueint 已被弃用请使用 cJSON_SetNumberValue 代替 */int valueint;/* 项的数字如果 typecJSON_Number */double valuedouble;/* 项的名称字符串如果此项是对象的子项或者在对象的子项列表中。 */char *string;
} cJSON;这段代码定义了一个名为 cJSON 的结构体这是 cJSON 库的核心数据结构它表示一个JSON数据项。每一个 cJSON 结构体可以表示一个JSON对象、数组、字符串、数字或其他的JSON数据类型。
下面是每个成员变量的功能 struct cJSON *next; 和 struct cJSON *prev;这两个指针分别指向相邻的JSON数据项它们使得 cJSON 结构体可以形成一个链表这对于表示一个JSON数组或对象是十分有用的。 struct cJSON *child;如果当前 cJSON 结构体表示一个JSON数组或对象child 指针会指向一个链表这个链表的元素就是数组或对象中的数据项。 int type;这个变量表示当前 cJSON 结构体表示的JSON数据类型例如它可能是 cJSON_NULL、cJSON_Number、cJSON_String、cJSON_Array 或 cJSON_Object 等。 char *valuestring;如果当前 cJSON 结构体表示一个JSON字符串valuestring 就会被设置成那个字符串的值。如果它表示一个原始的未解析的JSON字符串valuestring 也会被设置成那个字符串的值。 int valueint;这个成员现在已经不建议使用取而代之的是 cJSON_SetNumberValue 函数来设置JSON数字的值。 double valuedouble;如果当前 cJSON 结构体表示一个JSON数字valuedouble 就会被设置成那个数字的值。 char *string;如果当前 cJSON 结构体是一个JSON对象中的数据项string 就会被设置成那个数据项对应的键名。 我们可以使用 cJSON 库提供的各种函数如 cJSON_CreateObject、cJSON_AddItemToObject 或 cJSON_GetObjectItem等来创建、操作和查询 cJSON 结构体。
3.3 创建键值对 cJSON_AddStringToObject 。这个函数是 cJSON 库中的一个函数用于向一个 JSON 对象中添加一个字符串类型的键值对。
cJSON *cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string); cJSON * const object这是一个指向 JSON 对象的指针表示你要往哪个对象中添加键值对。 const char * const name这是一个字符串表示你要添加的键的名称key。 const char * const string这是一个字符串表示你要添加的值value。
返回值 cJSON 这个函数返回一个指向新添加的 JSON 元素的指针。这个元素包含了添加的字符串值。如果添加失败返回 NULL。
3.4 添加嵌套的JSON对象 cJSON_AddItemToObject来自 cJSON 库。函数原型应该是
cJSON_bool cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item); 这个函数的作用是将一个 cJSON 结构item它可以代表任何类型的JSON数据如对象、数组、字符串、数字等添加到另一个 cJSON 对象结构中并将其与指定的键string相关联。
参数解释如下 cJSON *object这是一个指向目标JSON对象的指针你会向它添加一个新的元素。 const char *string这是你想要在目标对象中创建的键的名称。 cJSON *item这是一个指向你想要添加的 cJSON 元素的指针。
返回值 cJSON_bool这是一个布尔值如果成功添加元素则返回 cJSON_True否则返回 cJSON_False。
下面是一个使用 cJSON_AddItemToObject 函数添加嵌套 JSON 对象的示例
#include stdio.h
#include stdlib.h
#include cJSON.h
int main()
{// 创建一个新的JSON对象cJSON *root cJSON_CreateObject();// 向根对象中添加一个名为key1的键值对值为字符串10cJSON* key1 cJSON_AddStringToObject(root,key1,10);cJSON* last NULL; // 用于保存上一个添加的键值对for(int i 0; i 5; i ){// 创建一个名为obj1的子对象cJSON* obj1 cJSON_CreateObject();// 将子对象添加到根对象中cJSON_AddItemToObject(root,obj1,obj1); // 向子对象中添加一个名为key2的键值对值为字符串20cJSON* key2 cJSON_AddStringToObject(obj1,key2,20); // 将子对象添加到根对象中lastkey2;}if(key1 ! NULL){printf(key:%s value :%s\n,key1-string,key1-valuestring);}// 将JSON对象转换为字符串格式char *str cJSON_Print(root); //输出json字符串// 打印转换后的JSON字符串printf(str);// 释放转换成字符串所使用的内存free(str);// 暂停程序运行以便查看控制台输出system(pause0);system(pause0);return 0;
} 在这个示例中我们创建了一个根对象 root 和一个嵌套对象 nested然后向嵌套对象添加了一个字符串键值对并将嵌套对象作为根对象的一个字段添加进去。最后我们打印并释放了相关的内存。 四、添加数组
4.1 创建数组
cSON_PUBLIC(cSON *) cSON_CreateArray(void);这个函数声明创建一个空的JSON数组并返回一个指向该数组的cJSON指针
cJSON_PUBLIC是一个宏用于定义函数的可见性通常用于导出函数供外部使用。
函数没有参数因此调用时不需要传递任何参数。返回值是一个指向新创建的JSON数组的指针。你可以使用这个指针来添加元素到数组中或者将数组添加到其他JSON对象中。
示例用法
cJSON *array cJSON_CreateArray();
if (array NULL) {fprintf(stderr, 错误: 无法创建JSON数组。\n);return 1;
}// 现在你可以使用 array 指针来操作这个JSON数组
确保在使用完数组后调用cJSON_Delete(array)来释放内存以避免内存泄漏。
4.2 添加元素到数组
cJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);这个函数的作用是将一个JSON元素添加到指定的JSON数组中。函数的返回值是一个布尔值表示添加操作是否成功。如果成功添加元素返回true否则返回false。
参数说明
cJSON *array: 这是一个指向JSON数组的指针表示你要往哪个数组中添加元素。cJSON *item: 这是一个指向要添加的JSON元素的指针。可以是任何JSON数据类型比如字符串、数字、对象等。
我们首先创建了一个空的JSON数组和一个字符串元素然后将字符串元素添加到数组中。如果添加操作成功数组将包含这个新添加的元素。如果任何步骤失败我们会打印错误信息并释放已分配的内存。
#include stdio.h
#include stdlib.h
#include cJSON.hint main()
{// 创建一个JSON对象cJSON *root cJSON_CreateObject();if (root NULL) {fprintf(stderr, 错误: 无法创建JSON对象。\n);return 1;}// 定义一个整数数组int a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 创建一个包含整数数组的JSON数组cJSON *array cJSON_CreateIntArray(a, 10);if (array NULL) {fprintf(stderr, 错误: 无法创建JSON数组。\n);cJSON_Delete(root);return 1;}// 将JSON数组添加到JSON对象中键名为arraycJSON_AddItemToObject(root, array, array);// 将JSON对象转换为字符串并打印char *json_str cJSON_Print(root);if (json_str ! NULL) {printf(生成的JSON对象: \n%s\n, json_str);free(json_str);} else {fprintf(stderr, 错误: 无法打印JSON对象。\n);}// 释放JSON对象cJSON_Delete(root);// 暂停程序运行以便查看控制台输出system(pause);return 0;
}创建一个JSON对象。定义一个整数数组。创建一个包含整数数组的JSON数组。将JSON数组添加到JSON对象中键名为array。将JSON对象转换为字符串并打印。释放JSON对象。暂停程序运行以便查看控制台输出。 五、将JSON对象转为字符串
cSON_Print 函数的作用是将一个 cJSON 元素转换成字符串并返回这个字符串的指针。这个函数是用于将 JSON 对象或数组转换为可读的字符串格式。
CSON_PUBLIC(char *) cSON_Print(const cSON *item);#include stdio.h
#include stdlib.h
#include cJSON.hint main()
{// 创建一个JSON对象cJSON *root cJSON_CreateObject();if (root NULL) {fprintf(stderr, 错误: 无法创建JSON对象。\n);return 1;}// 添加一些数据到JSON对象中cJSON_AddNumberToObject(root, number, 123);cJSON_AddStringToObject(root, string, Hello, World!);// 将JSON对象转换为字符串char *json_str cJSON_Print(root);if (json_str ! NULL) {printf(生成的JSON字符串: \n%s\n, json_str);// 释放动态分配的字符串内存free(json_str);} else {fprintf(stderr, 错误: 无法打印JSON对象。\n);}// 释放JSON对象cJSON_Delete(root);return 0;
}我们首先创建了一个 JSON 对象 root并向其中添加了一个数字和一个字符串。然后我们使用 cJSON_Print 函数将这个 JSON 对象转换为字符串并打印出来。最后我们释放了动态分配的字符串内存和 JSON 对象。