当前位置: 首页 > news >正文

C 开源库之cJSON

cJSON简介 

        CJSON库是一个用于解析和生成JSON数据的C语言库。 它提供了一组函数,使得在C语言中操作JSON数据变得简单而高效。 您可以使用CJSON库来解析从服务器返回的JSON数据,或者将C语言数据结构转换为JSON格式以进行传输。

cJSON 使用

官网地址:https://sourceforge.net/projects/cjson/

cJSON只有一个cjson.h 和cjson.c 文件,可以很方便的集成到其他项目中。cJSON支持将JSON数据解析为cJSON对象,也支持将cJSON对象转换为JSON数据。cJSON的使用非常简单,只需要包含 cjson.h 头文件,然后调用相应的API即可完成JSON数据的解析和生成。

cJSON 数据生成

新增cjson_demo1.c 文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "cJSON.h"
/*** 目标:1、引入cjson 库依赖文件(cJSON.c/cJSON.h)*      2、cjson 库基本使用 */
int main(){// 第一步:创建cJSON 对象cJSON *jsonObject = cJSON_CreateObject();// 第二步:输出cJSON 对象char *content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第三步:cJSON 对象添加属性:基本属性之字符串cJSON_AddItemToObject(jsonObject, "name", cJSON_CreateString("周志刚"));content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第三步:cJSON 对象添加属性:基本属性之整形cJSON_AddItemToObject(jsonObject, "age", cJSON_CreateNumber(32));content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第三步:cJSON 对象添加属性:基本属性之boolcJSON_AddItemToObject(jsonObject, "man", cJSON_CreateBool(1));content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第三步:cJSON 对象添加属性:基本属性之NULLcJSON_AddItemToObject(jsonObject, "woman", cJSON_CreateNull());content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第四步:cJSON 对象添加属性:复杂属性之数组cJSON * childs = cJSON_CreateArray();cJSON_AddItemToArray(childs, cJSON_CreateString("周晨曦"));cJSON_AddItemToArray(childs, cJSON_CreateString("周晨宇"));cJSON_AddItemToObject(jsonObject, "childs", childs);content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第四步:cJSON 对象添加属性:复杂属性之cJSON对象cJSON *wife = cJSON_CreateObject();cJSON_AddItemToObject(wife, "name", cJSON_CreateString("王珍"));cJSON_AddItemToObject(jsonObject, "wife", wife);content = cJSON_Print(jsonObject);printf("%s\n",  content);// 第五步:输出json 字符串到指定文件FILE *file = fopen("output.json", "w+");if(file == NULL){perror("fopen failed !!\n");return -1;}char buffer[1024];// 初始化memset(buffer, 0,1024);// 赋值strcpy(buffer, content);int length = strlen(buffer);// 文件写入if(fwrite(buffer, length, 1, file) <=0){perror("fwrite failed !!\n");return -1;} // 文件关闭fclose(file);// 释放cJSON 对象和字符串cJSON_Delete(jsonObject);free(content);return 0;
}

编译:gcc cJSON.c cjson_demo1.c -o cjson_demo1 -lm

执行:./cjson_demo1

执行效果:

 

 cJSON 数据解析

新增cjson_demo2.c 文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "cJSON.h"
/*** 目标:1、引入cjson 库依赖文件(cJSON.c/cJSON.h)*      2、cjson 库基本使用 */
int main(){// 第一步:从指定文件读取json 字符串FILE *file = fopen("output.json", "r");if(file == NULL){perror("fopen failed !!\n");return -1;}char buffer[1024];// 初始化memset(buffer, 0,1024);// 文件读取fread(buffer, 1024, 1, file);// 文件关闭fclose(file);// 第二步:解析json 字符串cJSON *jsonObject = cJSON_Parse(buffer);if(jsonObject == NULL){perror("Parse failed!\n");return -1;}// 第三步:解析键值对cJSON *name =cJSON_GetObjectItem(jsonObject, "name");char *content = cJSON_Print(name);printf("%s\n",  content);// 第四步: 解析JSON对象cJSON *wife = cJSON_GetObjectItem(jsonObject, "wife");content = cJSON_Print(wife);printf("%s\n",  content);// 第五步: 解析JSON数组cJSON *childs = cJSON_GetObjectItem(jsonObject, "childs");content = cJSON_Print(childs);printf("%s\n",  content);// 释放cJSON 对象和字符串cJSON_Delete(jsonObject);free(content);return 0;
}

编译:gcc cJSON.c cjson_demo2.c -o cjson_demo2 -lm

执行:./cjson_demo2

执行效果:

 

cJSON 问题 

问题一:找不到pow和floor函数:undefined reference to pow' 和 undefined reference tofloor’

解决办法: 编译需要添加math库/libm,在编译代码中添加"-lm"。

http://www.lryc.cn/news/427662.html

相关文章:

  • ROW_NUMBER(), RANK(), DENSE_RANK() SQL排序函数图文详解
  • Spring IoCDI(下)—DI的尾声
  • 仕考网:考外省公务员可以调回本地吗?
  • 《工厂模式在软件开发中的深度剖析与应用》
  • 双向通信之Websocket
  • git学习使用碰到的问题1
  • JavaScript初级——Math
  • ffmpeg的基础命令
  • 二建机电工程实务试题内附答案
  • Redis的热key以及Big(大)key是什么?如何解决Redis的热key以及Big(大)key问题?
  • django学习入门系列之第九点《MySQL命令介绍一》
  • Mysql面试一
  • 模型优化之剪枝
  • JVM的组成
  • 快速上手 iOS Protocol Buffer
  • 每天一个数据分析题(四百八十)- 线性回归建模
  • 电动汽车和混动汽车DC-DC转换器的创新设计与测试方法
  • OriginPro快速上手指南:数据可视化与分析的利器
  • 缓存学习
  • 亚世光电:消费电子年度表演
  • AI 工程应用 建筑表面检测及修复
  • Qt-Qt中的小事项(7)
  • Android MediaRecorder 视频录制及报错解决
  • HarmonyOS应用程序访问控制探究
  • 董卫民赴考拉悠然等企业调研,强调加快发展人工智能产业
  • MFC将类A中的事件在类B中处理采用回调函数实现
  • 公众号 微信登录
  • sanic + webSocket:股票实时行情推送服务实现
  • Unity动态给按钮各个状态下的图片赋值
  • xiaomi pad 6PRO 小米平板6 pro hyperOS降级 澎湃os 降级MIUI 14 教程 免解锁BL 降级,168小时解锁绑定