cJSON C语言库解析和生成JSON数据

文章目录

    • 概述
    • 常用的API函数介绍
    • 范例代码
    • 应用拓展
    • 总结

概述

cJSON是一个轻量级的C语言库,用于解析和生成JSON数据。它提供了简洁而高效的API,使得在C语言中处理JSON数据变得简单和方便。

以下是一些cJSON库的主要特点和用法:

解析JSON数据:使用cJSON_Parse函数可以将JSON字符串解析为cJSON对象。该函数会返回一个指向根节点的指针。如果解析失败,返回NULL。

生成JSON数据:使用cJSON_CreateObject和cJSON_CreateArray等函数可以创建cJSON对象。然后使用cJSON_AddItemToObject和cJSON_AddItemToArray等函数将子项添加到对象或数组中。最后,使用cJSON_PrintUnformatted或cJSON_Print等函数将cJSON对象转换为JSON字符串。

获取字段值:使用cJSON_GetObjectItem和cJSON_GetArrayItem等函数可以获取cJSON对象或数组中的特定字段值。根据字段的类型,可以使用相应的函数来获取字段值,如cJSON_GetString、cJSON_GetNumber、cJSON_GetBool等。

遍历JSON数据:cJSON库提供了用于遍历JSON对象和数组的宏,如cJSON_ArrayForEach和cJSON_ObjectForEach。这些宏可以方便地遍历JSON数据的子项。

释放内存:使用cJSON_Delete可以释放通过cJSON_Parse创建的cJSON对象,以避免内存泄漏。

cJSON库是一个非常轻量级和灵活的库,适用于在C语言中处理JSON数据。它具有简单的API和高性能,可以在各种嵌入式系统和低资源环境中使用。无论是解析还是生成JSON数据,cJSON库都为C语言开发者提供了一种简单而可靠的方式。

常用的API函数介绍

以下是一些常用的cJSON库的API函数介绍:

cJSON_Parse:将JSON字符串解析为cJSON对象。返回一个指向根节点的指针。如果解析失败,返回NULL。cJSON* cJSON_Parse(const char* value);
cJSON_Print:将cJSON对象转换为格式化的JSON字符串,并返回一个指向字符串的指针。需要在使用完之后手动释放内存。char* cJSON_Print(const cJSON* item);
cJSON_GetObjectItem:从cJSON对象中获取指定名称的字段值。返回一个指向字段值的指针。如果字段不存在或类型不匹配,返回NULL。cJSON* cJSON_GetObjectItem(const cJSON* const object, const char* const string);
cJSON_GetArrayItem:从cJSON数组中获取指定索引位置的元素。返回一个指向元素的指针。如果索引超出范围,返回NULL。cJSON* cJSON_GetArrayItem(const cJSON* const array, int index);
cJSON_IsObject:检查给定的cJSON对象是否为JSON对象类型。cJSON_bool cJSON_IsObject(const cJSON* const object);
cJSON_IsArray:检查给定的cJSON对象是否为JSON数组类型。cJSON_bool cJSON_IsArray(const cJSON* const array);
cJSON_AddItemToObject:将一个子项添加到cJSON对象中。子项可以是其他cJSON对象、数组、字符串等。void cJSON_AddItemToObject(cJSON* object, const char* string, cJSON* item);
cJSON_AddItemToArray:将一个子项添加到cJSON数组中。子项可以是其他cJSON对象、数组、字符串等。void cJSON_AddItemToArray(cJSON* array, cJSON* item);
cJSON_CreateObject:创建一个空的cJSON对象,并返回指向该对象的指针。cJSON* cJSON_CreateObject(void);
cJSON_CreateArray:创建一个空的cJSON数组,并返回指向该数组的指针。cJSON* cJSON_CreateArray(void);
cJSON_CreateString:创建一个cJSON字符串,并返回指向该字符串的指针。cJSON* cJSON_CreateString(const char* string);
cJSON_CreateNumber:创建一个cJSON数字,并返回指向该数字的指针。cJSON* cJSON_CreateNumber(double number);
cJSON_CreateBool:创建一个cJSON布尔值,并返回指向该布尔值的指针。cJSON* cJSON_CreateBool(cJSON_bool boolean);
cJSON_Delete:释放通过cJSON_Parse创建的cJSON对象,并递归删除其所有子项。void cJSON_Delete(cJSON* item);这些是cJSON库中一些常用的API函数。通过使用这些函数,您可以在C语言中方便地解析和生成JSON数据。请注意,在使用完cJSON对象后,需要使用cJSON_Delete函数来释放内存,以避免内存泄漏。

范例代码

以下是完整的示例代码,包括包含所需头文件、函数注释以及主函数的实现

#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"/*** @brief 主函数,用于解析JSON数组并输出解析结果* * @return 返回程序执行结果*/
int main() {// 读取JSON字符串const char* json_data = "[{\"name\":\"John\",\"age\":25,\"address\":\"123 Main St\"},{\"name\":\"Jane\",\"age\":30,\"address\":\"456 Elm St\"}]";// 解析JSON数组cJSON* root = cJSON_Parse(json_data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习 修改预训练参数的网络模型

在迁移学习中&#xff0c;要使用预训练权重。在训练好的网络权重中&#xff0c;使用的是1000类的分类任务。而我们自己的分类任务中没有1000类&#xff0c;需要修改网络。如果将MobileNetV2(num_classes5)&#xff0c;我们的网络在最后输出是5类&#xff0c;与1训练好的1000类不…

如何保护企业云上安全

近日&#xff0c;CrowdStrike发布了《2024年全球威胁报告》&#xff0c;揭示了网络攻击的最新趋势。报告指出&#xff0c;网络攻击生态系统仍在持续增长&#xff0c;CrowdStrike在2023年观察到了34个新的威胁参与者。同时&#xff0c;攻击者正越来越多地瞄准云环境&#xff0c;…

Docker Desktop将镜像存储位置从C盘迁移到其它盘

一、简述 Docker Desktop默认安装在C盘,默认镜像存储位置在 C:\用户\Administrator\AppData\Local\Docker\wsl Docker Desktop 通过WSL2启动,会自动创建2个子系统,分别对应2个 vhdx 硬盘映像文件。 可以命令行执行wsl --list -v 看到 二、迁移步骤 1、在Docker Desktop…

css之常用样式

展示样式一&#xff1a; <div class"showListBox"><div class"List" v-for"(i,index) in sealList" :key"index"> <div class"ListItemCon"><div class"ListItem-titleBox"><img src…

阿里云ACK的应用服务如何暴露公网并挂载域名

背景介绍 针对部署到阿里云ACK集群的应用服务&#xff0c;实际业务场景可能需要我们暴露其中的服务到公网并要求通过域名访问改服务&#xff0c;那具体在阿里云平台上如何实现呢 配置步骤 新建ack集群是后续工作的第一前提由于篇幅有限就不在本文赘述&#xff0c;如下是基本…

Conmi遇到的坑——禅道的PCDN

好家伙&#xff0c;悄悄在后台吃了七十多G流量&#xff0c;我把你当兄弟宣传&#xff0c;你把我当PCDN吸。 还纳闷今天创建个VUE项目怎么提示D盘没空间&#xff0c;明明留了几十G&#xff0c;好家伙&#xff0c;一下子全吸干了。 删了两个&#xff0c;还有一个

6N137SDM光电耦合器中文资料规格书PDF数据手册引脚图图片价格参数芯片概述

产品概述&#xff1a; 6N137M、HCPL2601M、HCPL2611M 单沟道和 HCPL2630M、HCPL2631M 双沟道包含一个 850 nm AlGaAS LED&#xff0c;与带有可调谐输出的极高速集成式光电探测器逻辑门级进行光耦合。此输出具有一个开路集电极&#xff0c;允许有线 OR 输出。耦合参数在 -40C 至…

QT----计算器

目录 1 搭建标准界面2、 逻辑编写2.1 初始化 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点&#xff0c;同时对按钮分组进行样式编辑&#xff0c;添加字符串name,为number&#xff0c;其他按键为other。之前的文章里出现过好几次不在赘述 修改最大的样式…

git init 执行后发生了什么?

首先在磁盘中创建一个新目录 Git&#xff0c;进入该目录后执行 git init 初始化。这个时候目录下会创建一个隐藏目录 ./git&#xff0c;这个./git 目录叫做 Git 版本库或者仓库 $ git init Initialized empty Git repository in D:/Git/.git/ 在讲解.git 目录内容前&#xff0…

【SpringBoot3】快速启动框架 快速入门 配置文件

文章目录 SpringBoot3介绍一、快速入门二、入门总结1. 为什么依赖不需要写版本&#xff1f;2. 启动器(Starter)是什么3. SpringBootApplication注解包括的效果&#xff1f; 三、SpringBoot3配置文件3.1 统一配置管理概述3.2 属性配置文件使用3.3 YAML配置文件使用3.4 批量配置文…

【Unity】读取Json的三种方法(JsonUtility,LitJson,Newtonsoft)

介绍 在Unity开发过程中&#xff0c;Json是比较常用的一种数据存储文本&#xff0c;尤其是在和第三方交互中&#xff0c;基本都是json格式。 先给出一个Json示例&#xff0c;我们来看看是如何解析的。 {"Player": [{"id": 1001,"name": "…

面试如何介绍MVCC

MVCC&#xff08;多版本并发控制&#xff09;是一种并发控制机制&#xff0c;用于在数据库中实现高效的并发读取操作。它的基本思想是为每个数据记录维护多个版本&#xff0c;允许并发事务在不相互阻塞的情况下读取不同版本的数据。 在 MVCC 中&#xff0c;每个事务都有自己的视…

SSL---VPN

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.SSL-VPN概述 SLL VPN是一种基于HTTPS&#xff08;即支持SSL的HTTP协议&#xff09;的远程安全接入技术。它充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制&#…

23-Java空对象模式 ( Null Object Pattern )

Java空对象模式 实现范例 在空对象模式&#xff08;Null Object Pattern&#xff09;中&#xff0c;一个空对象取代 NULL 对象实例的检查Null 对象不是检查空值&#xff0c;而是反应一个不做任何动作的关系&#xff0c;这样的 Null 对象也可以在数据不可用的时候提供默认的行为…

maven运行spring boot项目

我用idea想跑一个整合flowable的spring boot项目&#xff0c;但是跑不起来&#xff0c;原因是jdk版本不够高。但是我的idea是2018版本&#xff0c;最高只能支持到jdk11。就想办法不用idea编译、打包、运行项目。因为spring boot是maven项目&#xff0c;所以可以用maven进行打包…

QT文件的读取与插入

实现功能&#xff1a; 1.输入文本到 Line_edit 点击插入&#xff0c;把文本添加到文件末端 2.点击 获取 读取txt文本&#xff0c;将文本内容显示到左边的窗口中 3.双击左边窗口的选项&#xff0c;弹出对话框&#xff0c;跳转到右边 主要介绍一下文件OI的使用 首先用QFile fil…

51单片机基础篇系列-LED灯点亮代码部分

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” #include<reg52.h> //包含单片机内部寄存器 void main() //&#xff08;&#xff09;{P10xfe;//1111 1110while(1); // } 上面是第一个 LED实验 #include<reg52.h>…

51单片机新建工程

文章目录 前言一、keil新建工程&#xff1f;1.新建文件夹 二、使用步骤1.引入库2.读入数据 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、keil新…

基于ACM32 MCU的两轮车充电桩方案介绍,有利于打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…

【笔记版】cgroup大摸底

云端&#xff1a; subsystem实际上就是cgroups的资源控制系统。 blkio&#xff1a; 这个subsystem可以为块设备设定输入/输出限制&#xff0c;比如物理驱动设备&#xff08;包括磁盘、固态硬盘、USB等&#xff09;。cpu&#xff1a; 这个subsystem使用调度程序控制task对CPU的…