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

CJson 使用 - 解析Object结构

简介

准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧

步骤

下载

git clone https://github.com/DaveGamble/cJSON
或者直接压缩包下载也行, 毕竟国内有时候下载不下来

Qt 中使用cJson

在下载的cJson 目录中加入cJson.pri, 内容如下
INCLUDEPATH += $$PWD
HEADERS += \$$PWD/cJSON.h \$$PWD/cJSON_Utils.h \$$PWD/cJSON_util.hSOURCES += \$$PWD/cJSON.c \$$PWD/cJSON_Utils.c
创建一个Qt工程, .pro中加入cJson.pri

例如 include(E:\workspace\cJson\cJSON\cJson.pri)

json结构解析代码
	QByteArray jsonData = "{"start_x": 1,"start_y": 2,"width": 100,"height": 100,"img_data": [2,3,4,5]
}";
cJSON *json = cJSON_Parse((const char*)jsonData.data());if (NULL == json){logger("parse failed!");return;}cJSON *tempJson = json->child;QString printString;/* 打印一下最外层的json数据 */do{printString.append(QString("name: %1, ").arg(QString::fromStdString(tempJson->string))); // 打印名称switch (tempJson->type){case cJSON_Invalid:printString.append(QString("cJSON_Invalid"));break;case cJSON_False:printString.append(QString("cJSON_False"));break;case cJSON_True   :printString.append(QString("cJSON_True"));break;case cJSON_NULL   :printString.append(QString("cJSON_NULL"));break;case cJSON_Number :printString.append(QString("cJSON_Number, %1").arg(tempJson->valueint));break;case cJSON_String :printString.append(QString("cJSON_String, %1").arg(QString::fromStdString(tempJson->valuestring)));break;case cJSON_Array  :printString.append(QString("cJSON_Array"));break;case cJSON_Object :printString.append(QString("cJSON_Object"));break;case cJSON_Raw    :printString.append(QString("cJSON_Raw"));break;default:break;}logger(printString);printString.clear();tempJson = tempJson->next;} while(tempJson);delete json;json = NULL;
测试 json 结构

{
“start_x”: 1,
“start_y”: 2,
“width”: 100,
“height”: 100,
“img_data”: [4, 3, 2, 1]
}

打印信息

name: start_x, cJSON_Number, 1
name: start_y, cJSON_Number, 2
name: width, cJSON_Number, 100
name: height, cJSON_Number, 100
name: img_data, cJSON_Array

相关文章:

  • 计算机图形学理论(3):着色器编程
  • 【iOS】UICollectionView
  • 双向长短期记忆网络(Bi-LSTM)-多输入回归预测
  • P4 音频知识点——PCM音频原始数据
  • ChatGPT4与ArcGIS Pro3助力AI 地理空间分析和可视化及助力科研论文写作
  • Ionic实战二十七:移动端录音方案及Nginx部署配置
  • ubuntu22上使用qemu-system-arm调试linux
  • DLLNotFoundException:xxx tolua... 错误打印
  • ubuntu22.04+ROS2推荐匹配的gazebo版本
  • LeetCode 每日一题 2023/12/18-2023/12/24
  • python 使用 pip 安装第三方库 导入不成功
  • 【算法设计与分析】——动态规划算法
  • 【docker笔记】docker常用命令
  • 磁盘类型选择对阿里云RDS MySQL的性能影响
  • 硬核实战!mysql 错误操作整个表全部数据后如何恢复?附解决过程、思路(百万行SQL,通过binlog日志恢复)
  • ES6指北【2】—— 箭头函数
  • idea + plantuml 画流程图
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java的Interrupt与线程中断
  • Java知识点总结(JavaIO-打印流)
  • Meteor的表单提交:Form
  • MySQL的数据类型
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于使用markdown的方法(引自CSDN教程)
  • 警报:线上事故之CountDownLatch的威力
  • 我的业余项目总结
  • 一个完整Java Web项目背后的密码
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #etcd#安装时出错
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma 指令
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)(1.9) MSP (version 4.2)
  • (java)关于Thread的挂起和恢复
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)c52学习之旅-独立按键
  • (一)Neo4j下载安装以及初次使用
  • (转)VC++中ondraw在什么时候调用的
  • ***通过什么方式***网吧
  • **CI中自动类加载的用法总结
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 项目指定SDK版本
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)