wordpress网站密码/企业网站建设制作
如何高效使用和处理JSON格式的数据
- 问题引入
- 关于CJSON
- 示例代码
- 头文件引用
- 处理数据
问题引入
最近的项目在用c处理后台的数据时,因为好多外部接口都在使用Json格式作为返回的数据结构和数据描述,如何在c中高效使用和处理Json格式的数据就成为了必须要解决的问题。
关于CJSON
经常使用Java开发的同学可能觉得这个不是个问题,fastjson对于Json格式的数据处理提供了很好的支持。顺着这个思路往下走后,在Json的官网上发现推荐了好几个c的功能库。根据个人使用的情况,综合易于上手和对Json数据操作的便捷性来说,推荐cJSON: cJSON on Github
示例代码
头文件引用
cJson可以直接在使用的地方引用,如下面这样。
#include "../include/cJSON.h"
#include "../include/cJSON_Utils.h"
也可能编译成so文件,作为库来使用。
处理数据
cJSON *json = NULL;
cJSON *jdata = NULL;
cJSON *jlists = NULL;
cJSON *jlist = NULL;json = cJSON_Parse(resp->response); // 从项目接口中返回的Json格式的数据
if (json == NULL)
{// 解析失败的情况下进行错误处理。const char *error_ptr = cJSON_GetErrorPtr();if (error_ptr != NULL){fprintf(stderr, "Error before: %s\n", error_ptr);}return OSMP_ERR;
}
// 获取对应的节点下的数据。我的项目中数据列表在{ data: { list: { xxx } } } 下。
// 可以seek到对应的节点下,获取到节点数据进行处理。
jdata = cJSON_GetObjectItemCaseSensitive(json, "data");
jlists = cJSON_GetObjectItemCaseSensitive(jdata, "list");// 循环处理列表中的每一条数据。
// cJson通过一个macro来组织循环处理列表中的处理。为了便于Java开发同学理解,相当于Java中的
// for(String item : arrayList ) {
// System.out.println(item);
// }
cJSON_ArrayForEach(jlist, jlists)
{cJSON *id = cJSON_GetObjectItemCaseSensitive(jlist, "id");cJSON *projectnum = cJSON_GetObjectItemCaseSensitive(jlist, "projectnum");cJSON *name = cJSON_GetObjectItemCaseSensitive(jlist, "name");cJSON *status = cJSON_GetObjectItemCaseSensitive(jlist, "status");cJSON *contractamount = cJSON_GetObjectItemCaseSensitive(jlist, "contractamount");cJSON *income = cJSON_GetObjectItemCaseSensitive(jlist, "income");cJSON *actualpayment = cJSON_GetObjectItemCaseSensitive(jlist, "actualpayment");cJSON *managerName = cJSON_GetObjectItemCaseSensitive(jlist, "managerName");cJSON *nextmilestone = cJSON_GetObjectItemCaseSensitive(jlist, "nextmilestone");cJSON *plancomplettime = cJSON_GetObjectItemCaseSensitive(jlist, "plancomplettime");cJSON *countdown = cJSON_GetObjectItemCaseSensitive(jlist, "countdown");// 组装sql进行后处理。char* sql = (char*)malloc(sizeof(char*)*10240);sprintf(sql, "insert into utmp_projectpageqrydetailinformation(id, projectnum, name ,status, contractamount, income, actualpayment, manager_name, nextmilestone, plancomplettime, countdown) values(%d, '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s');", id->valueint, projectnum->valuestring, name->valuestring, status->valuestring, contractamount->valueint, income->valueint, actualpayment->valueint, managerName->valuestring, nextmilestone->valuestring, plancomplettime->valuestring, countdown->valuestring);
}
// 后续可以做一些资源清理操作,防止memory leak导致应用coredump.
如果有什么使用上的问题,欢迎留言一起讨论。:)
相关文章:

由浅入深C系列八:如何高效使用和处理Json格式的数据
如何高效使用和处理JSON格式的数据 问题引入关于CJSON示例代码头文件引用处理数据 问题引入 最近的项目在用c处理后台的数据时,因为好多外部接口都在使用Json格式作为返回的数据结构和数据描述,如何在c中高效使用和处理Json格式的数据就成为了必须要解决…...

多媒体应用设计师 第16章 多媒体应用系统的设计和实现示例
口诀 思维导图 2020...

golang平滑重启库overseer实现原理
overseer主要完成了三部分功能: 1、连接的无损关闭,2、连接的平滑重启,3、文件变更的自动重启。 下面依次讲一下: 一、连接的无损关闭 golang官方的net包是不支持连接的无损关闭的,当主监听协程退出时,…...

用Python定义一个函数,用递归的方式模拟汉诺塔问题
【任务需求】 定义一个函数,用递归的方式模拟汉诺塔问题,三个柱子,分别为A、B、C,其中A柱子上有N个盘子,从小到大编号为1到N,盘子大小不同。现在要将这N个盘子从A柱子移动到C柱子上,但移动的过…...

二手的需求
案例1030 某天项目经理小王,从用户现场带回了需求,以图形的方式,交给了产品经理。告诉他就照这样设计,结果是项目经理放弃让产品经理出效果图。 原因是产品经理觉得项目经理带回来的需求有问题。项目经理解释产品经理不接受&…...

大厂面试题-JVM为什么使用元空间替换了永久代?
目录 面试解析 问题答案 面试解析 我们都知道Java8以及以后的版本中,JVM运行时数据区的结构都在慢慢调整和优化。但实际上这些变化,对于业务开发的小伙伴来说,没有任何影响。 因此我可以说,99%的人都回答不出这个问题。 但是…...

基本微信小程序的驾校宝典系统-驾照考试系统
项目介绍 系统模块分析是对系统的各个模块做出相应的说明以及解释。此系统的模块分别有用户模块、服务端模块和管理端模块这两大基本模块,其中服务端模块包括了首页、教练信息、教练咨讯、考试预约、我的等;而管理端模块则包括了个人中心、用户管理、教…...

02、SpringCloud -- Redis和Cookie过期时间刷新功能
目录 需求:代码流程过滤器类工具类过滤判断远程调用feign接口gitee 配置接口实现过滤器run方法测试:问题:秒杀功能完整分析图 需求: cookie应该写在网关中,网关中可以自定义filter过滤器,用来实现cookie的刷新和redis中key的刷新,延长用户的操作时间。 就是让用户每操…...

【报错】kali安装ngrok报错解决办法(zsh: exec format error: ./ngrok)
问题描述 kali安装ngrok令牌授权失败 在安装配置文件的时候报错:zsh: exec format error: ./ngrok 原因分析: 在Kali Linux上执行./ngrok时出现zsh exec格式错误的问题可能是由于未安装正确版本的ngrok或操作系统不兼容ngrok导致的。以下是一些可能的解…...

<学习笔记>从零开始自学Python-之-常用库篇(十三)内置小型数据库shelve
一、shelve简介: shelve是Python当中数据储存的方案,类似key-value数据库,便于保存Python对象,shelve只有一个open()函数,用来打开指定的文件(字典),会返回一…...

Redis快速上手篇七(集群-六台虚拟机)
Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 &#…...

LeetCode 301. 删除无效的括号【字符串,回溯或BFS】困难
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

面试经典159题——Day25
文章目录 一、题目二、题解 一、题目 125. Valid Palindrome A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric charact…...

C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计
效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_DNN_Demo …...

Windows环境下MosQuitto服务器搭建,安装mqtt服务端软件
1、下载、安装MosQuitto服务器 下载地址:http://mosquitto.org/files/binary/ 根据平台选择相应的代码下载。 安装完成后,安装文件夹下部分文件的功能...

web前端JS基础-----制作进度条
1,参考代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><progress id"pro" max"100" value"0"></progress><scrip…...

Linux命令解压多个tar.gz包
命令行解压单个tar.gz包: tar zxvf package.tar.gz 命令行解压多个tar.gz包: for f in *.tar.gz; do tar zxvf "$f"; done 这个命令会循环遍历当前目录下的所有tar.gz包,然后逐个解压。 注:如果想要解压到指定的目…...

Java基于SpringBoot+Vue的网上图书商城管理系统(附源码,教程)
文章目录 1. 简介2 技术栈3 系统功能4系统设计4.1数据库设计 5系统详细设计5.1系统功能模块5.1系统功能模块5.2管理员功能模块 源码下载地址 1. 简介 本次设计任务是要设计一个网上图书商城,通过这个系统能够满足网上图书商城的管理功能。系统的主要功能包括首页、…...

Visual Studio Code的下载与安装
Visual Studio Code(简称 VS Code)是由 Microsoft 开发的免费、开源的文本编辑器,适用于多种操作系统,包括 Windows、macOS 和 Linux。它的设计目标是成为一款轻量级、高效的代码编辑工具,同时提供丰富的扩展和功能&am…...

23种设计模式在SpringCloud源码里的应用
单例模式(Singleton):Spring 中的 Bean 默认都是单例模式,保证在整个应用中只有一个实例。 工厂方法模式(Factory Method):Spring 中的 BeanFactory 和 ApplicationContext 都实现了工厂方法模…...

几个精致的Linux命令
说到Linux命令,一些基础的简单的单个命令我就不说了,咱今天来点复杂的组合命令,比较长,但觉对很酷: 打印业务服务异常日志: tail -f business-service.log | grep -i exception --color 或者 grep --…...

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试
CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试 文章目录 CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试一、前言二、Windows运行时软plc配置编程1、安装Windows下的运行时扩展包(非必要)2、创建项目2.1、创建标准…...

vscode下ssh免密登录linux服务器
vscode使用ssh免密登录linux 1、安装SSH插件2、生成密钥3、linux安装ssh服务4、linux下配置公钥5、vscode远程登录 注:测试环境为window10Ubuntu1804/Ubuntu2204 1、安装SSH插件 扩展->搜索SSH->点击install进行安装,如下图所示: 2、…...

基于jquery+html开发的json格式校验工具
json简介 JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族…...

【面试经典150 | 栈】最小栈
文章目录 Tag题目来源题目解读解题思路方法一:辅助栈方法二:一个栈方法三:栈中存放差值 其他语言python3 写在最后 Tag 【设计类】【栈】 题目来源 155. 最小栈 题目解读 本题是一个设计类的题目,设计一个最小栈类 MinStack() …...

Linux网络基础2 -- 应用层相关
一、协议 引例:编写一个网络版的计算器 1.1 约定方案:“序列化” 和 “反序列化” 方案一:客户端发送形如“11”的字符串,再去解析其中的数字和计算字符,并且设限(如数字和运算符之间没有空格; 运算符只…...

【Python机器学习】零基础掌握SkewedChi2Sampler内核近似特征
有没有遇到这样的困扰:即使在拥有大量数据的条件下,传统的机器学习模型表现依然不佳?这时,数据预处理和特征工程成了解决问题的关键步骤。那么,有没有一种算法能够优化特征,提升模型性能呢? 假设一个在线商城希望通过用户行为(比如点击、购买等)来预测用户是否会成为…...

Unity Meta Quest 一体机开发(三):Oculus Integration 基本原理、概念与结构+玩家角色基本配置
文章目录 📕教程说明📕输入数据📕Oculus Integration 处理手部数据的推荐流程📕VR 中交互的基本概念📕Oculus Integration 中的交互流程📕配置一个基本的玩家物体⭐OVRCameraRig⭐OVRInteraction⭐OVRHandP…...

excel 拼接字符 单元格
需要将单元格作为字符串拼接,使用 & 符号,拼接逗号,分号,冒号,横杠等,需要用英文双引号。...

HarmonyOS 快速入门TypeScript
1.什么是TypeScript,它和JavaScript,ArkTs有什么区别 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发…...