Cjson 库使用

news/2024/9/24 2:50:32/

1. JSON简介

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

2. CJSON的安装

下载安装链接 :https://files.cnblogs.com/files/txwtech/cJSONFiles.zip

下载后解压压缩包,只需要将cJSON.c 和 cJSON.h 文件和自己的工程一起编译即可。

3. JSON语法

JSON对象是一个无序的"名称 / 值"键值对的集合:

  • 以"{“开始,以”}"结束,允许嵌套使用;
  • 每个名称和值成对出现,名称和值之间使用":"分隔;
  • 键值对之间用" , "分隔
  • 在这些字符前后允许存在无意义的空白符;

对于键值,可以有如下值:

  • 一个新的json对象
  • 数组:使用"[“和”]"表示
  • 数字:直接表示,可以是整数,也可以是浮点数
  • 字符串:使用引号 " 表示
  • 字面值:false、null、true中的一个(必须是小写)

4. cJSON常用函数

4.1. 构造json常用的函数

CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);	//创建对象---常用
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);	//创建数组---常用
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);//创建整型数组
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);//创建双浮点型数组
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);//在对象中添加null
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);//在对象中添加true
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);//在对象中添加false
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);//在对象中添加数字
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);//在对象中添加字符串
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);	//在对象中添加项目
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);//在数组中添加项目CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);//JSON数据结构转换为JSON字符串---有格式
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);	//JSON数据结构转换为JSON字符串---无格式CJSON_PUBLIC(void) cJSON_Delete(cJSON *item); //清除结构体

4.2. 解析json常用的函数

cJSON *cJSON_Parse(const char *value);
/*作用:将一个JSON数据包,按照cJSON结构体的结构序列化整个数据包,并在堆中开辟一块内存存储cJSON结构体
返回值:成功返回一个指向内存块中的cJSON的指针,失败返回NULL*/cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
/*作用:获取JSON字符串字段值
返回值:成功返回一个指向cJSON类型的结构体指针,失败返回NULL*/int cJSON_GetArraySize(cJSON *array);
/*作用:获取数组成员对象个数
返回值:数组成员对象个数*/void  cJSON_Delete(cJSON *c);
/*作用:释放位于堆中cJSON结构体内存
返回值:无*/

5. cJSON使用

5.1. 构建json格式数据

{"name": "Jason","age": 39,"height": 1.92,"gender": "M","salary": 70000,"married": true,"skill": ["c", "Java", "Python"],"address": {"country": "China","zip-code": 11111}
}
#include <stdio.h>
#include "cJSON.h"int main() {	cJSON* cjson = NULL;cJSON* cjson_skill = NULL;cJSON* cjson_address = NULL;cjson = cJSON_CreateObject();cJSON_AddStringToObject(cjson, "name", "jason");cJSON_AddNumberToObject(cjson, "age", 39);cJSON_AddStringToObject(cjson, "gender", "M");cJSON_AddNumberToObject(cjson, "salary", 70000);cJSON_AddTrueToObject(cjson, "married");cjson_skill = cJSON_CreateArray();cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("C"));cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("Java"));cJSON_AddItemToArray(cjson_skill, cJSON_CreateString("Python"));cJSON_AddItemToObject(cjson, "skill", cjson_skill);cjson_address = cJSON_CreateObject();cJSON_AddStringToObject(cjson_address, "country", "China");cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);cJSON_AddItemToObject(cjson, "skill", cjson_address);char *str = cJSON_Print(cjson);printf("%s\n", str);return 0;
}
{"name": "jason","age":  39,"gender":       "M","salary":       70000,"married":      true,"skill":        ["C", "Java", "Python"],"skill":        {"country":      "China","zip-code":     111111}
}

5.2. 解析json格式数据

5.2.1. 解析键值对

{"name": "Jason","age": 39,"height": 1.92,"gender": "M","salary": 70000,"married": true,
}
#include <stdio.h>
#include "cJSON.h"int main() {char strbuf[] = "{\"name\": \"Jason\",\"age\": 39,\"height\": 1.92,\"gender\": \"M\",\"salary\": 70000,\"married\": true}";cJSON* cjson = NULL;cJSON* tmp = NULL;cjson = cJSON_Parse(strbuf);tmp = cJSON_GetObjectItem(cjson, "name");printf("name : %s\n", tmp->valuestring);tmp = cJSON_GetObjectItem(cjson, "age");printf("age : %d\n", tmp->valueint);tmp = cJSON_GetObjectItem(cjson, "height");printf("height : %f\n", tmp->valuedouble);tmp = cJSON_GetObjectItem(cjson, "gender");printf("gender : %s\n", tmp->valuestring);tmp = cJSON_GetObjectItem(cjson, "salary");printf("salary : %d\n", tmp->valueint);tmp = cJSON_GetObjectItem(cjson, "married");printf("married : %d\n", tmp->valueint);cJSON_Delete(cjson);return 0;
}
name : Jason
age : 39
height : 1.920000
gender : M
salary : 70000
married : 1

5.2.2. 解析数组

{"name": "Jason","age": 39,"height": 1.92,"gender": "M","salary": 70000,"married": true,"skill": ["c", "Java", "Python"]
}
#include <stdio.h>
#include "cJSON.h"int main() {char strbuf[] = "{\"name\": \"Jason\",\"age\": 39,\"height\": 1.92,\"gender\": \"M\",\"salary\": 70000,\"married\": true, \"skill\": [\"c\", \"Java\", \"Python\"]}";int skill_array_size, i = 0;cJSON* cjson = NULL;cJSON* cjson_skill = NULL;cJSON* skill_item = NULL;cjson = cJSON_Parse(strbuf);cjson_skill = cJSON_GetObjectItem(cjson, "skill");skill_array_size = cJSON_GetArraySize(cjson_skill);for (i = 0; i < skill_array_size; i++) {skill_item = cJSON_GetArrayItem(cjson_skill, i);printf("%s\n", skill_item->valuestring);}cJSON_Delete(cjson);return 0;
}
c
Java
Python

5.2.3. 解析json嵌套数据

{"name": "Jason","age": 39,"height": 1.92,"gender": "M","salary": 70000,"married": true,"address": {"country": "China","zip-code": 11111}
}
#include <stdio.h>
#include "cJSON.h"int main() {char strbuf[] = "{\"name\": \"Jason\",\"age\": 39, \"address\": {\"country\": \"China\", \"zip-code\": 11111}}";int skill_array_size, i = 0;cJSON* cjson = NULL;cJSON* cjson_address = NULL;cJSON* address_item = NULL;cjson = cJSON_Parse(strbuf);cjson_address = cJSON_GetObjectItem(cjson, "address");address_item = cJSON_GetObjectItem(cjson_address, "country");printf("%s\n", address_item->valuestring);address_item = cJSON_GetObjectItem(cjson_address, "zip-code");printf("%d\n", address_item->valueint);cJSON_Delete(cjson);return 0;
}
China
11111

http://www.ppmy.cn/news/1429149.html

相关文章

耀斑层-如何在Unity中实现耀斑亮光效果

在Unity中实现耀斑亮光效果可以通过以下步骤来实现&#xff1a; 创建一个空物体作为光源&#xff1a;在场景中创建一个空物体&#xff0c;并将其放置在需要发出耀斑亮光效果的位置上。 添加光源组件&#xff1a;选中空物体&#xff0c;在Inspector面板中点击"Add Compone…

利用Django中的缓存系统提升Web应用性能

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在构建现代Web应用时&#xff0c;性能通常是至关重要的考虑因素之一。为了提高用户体验和应…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第九套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第九套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c…

视频教程下载:用ChatGPT的 API 开发AI应用指南

通过这门关于 OpenAI API 和 ChatGPT API 的全面课程&#xff0c;在您的应用中释放人工智能的力量。随着人工智能技术的快速发展&#xff0c;比以往任何时候都更重要的是保持领先地位&#xff0c;并为您的项目利用这些尖端工具。在本课程中&#xff0c;您将深入了解人工智能驱动…

云服务器安装docker环境

文章目录 1. Docker安装2. Portainer安装 可以使用termins连接服务器 1. Docker安装 查看系统的内核版本&#xff1a; uname -ryum 更新到最新版本 sudo yum update看到显示 Complete 就代表完成了&#xff0c;整个过程需要 5-10 分钟左右 安装Docker所需的依赖包 sudo yum…

云原生Kubernetes: K8S 1.29版本 部署ingress-nginx

目录 一、实验 1.环境 2. K8S 1.29版本 部署ingress-nginx 二、问题 1.kubectl 如何强制删除 Pod、Namespace 资源 2.创建pod失败 3.pod报错ImagePullBackOff 4.docker如何将镜像上传到官方仓库 5.创建ingress报错 一、实验 1.环境 &#xff08;1&#xff09;主机 表…

Python 全栈安全(四)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十五章&#xff1a;内容安全策略 本章涵盖 使用 fetch、navigation 和 document 指令编写内容安全策略 使用 django-csp 部署 CSP 使用报…

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本&#xff0c;在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典&#xff0c;等待将来进一步使用3.执行刚刚在Lua环境中定义的函数&#xff0c;以此来执行客户…