【Linux QT】添加Json-C库

news2024/9/22 13:25:19

前言

  在Linux应用开发中,Linux设备和服务器通信时,两者之间数据的传输通常采用JSON数据格式来作为载体,便于两者之间的数据交互。当设备端接收到服务端下发的JSON数据,设备端需要对JSON格式的数据进行解析;当设备端需要将设备的各项状态数据参数上传到服务器时,则需要各项状态数据参数打包成Json格式的数据包。故引入Json-c库来完成Json格式数据的解析和Json格式数据打包。

  1. 下载Json-c源码
    https://s3.amazonaws.com/json-c_releases/releases/index.html

  2. 选择Json-c版本
    在这里插入图片描述

  3. 解压到Ubuntu系统后,进入解压后的文件夹进行编译配置与安装。
    (1)可配置Json-c生成后的文件保存路径
    PS:如无特定路径需求,建议不配置此项,这将保持默认路径(/usr/lib)

./configure --prefix=指定Json-c编译后的文件保存路径

(2)可根据目标平台(x86平台,Arm平台)的不同,配置对应的交叉编译工具链。默认编译工具链为gcc

./configure CC=交叉编译器名称(已添加至环境变量)

PS:配置完成后,也可在生成的Makefile文件中,更改配置内容
在这里插入图片描述

在这里插入图片描述

(3)执行make进行编译

make

在这里插入图片描述
(4)执行make install完成库的安装,在这里插入图片描述
(5)完成后可在配置的路径中找到生成的头文件和库文件
在这里插入图片描述
(4)配置库链接器
由于我们在编译配置时,选择了指定的json库安装路径,并没有安装到默认路径/usr/lib下,所以需要在ld库链接器中添加Json-c库的所在路径

vim /etc/ld.so.conf      #在新的一行中加入库文件所在目录

在这里插入图片描述

  1. JSON库的使用

(1)如果是QT项目编译,在.pro项目文件中添加库路径和头文件路径
在这里插入图片描述

(2)如果是命令行编译:在编译选项中添加Json-c库的路径

gcc test.c -L  指定Json-c库路径 -I 指定Json-c头文件的路径

Demo

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "json-c/json.h"
#include "json-c/json_object.h"

char recvJson_buf[2*1024*1024+64] = "{ \"RequestCode\": \"PARAMSCHECK\", \"DeviceNum\": \"3002014833\", \"Params\": { \"WorkMode\": \"MixCount\", \"Currency\": \"RUB\", \"BankSet\": { \"NetParaSet\": { \"Relink\": \"2\", \"TxTimeOut\": \"0\", \"USave\": \"90\", \"ActivePkg\": \"500\", \"TimeSyncCycle\": \"30\" }, \"NetSW\": { \"NetworkSW\": \"1\", \"RejUpload\": \"1\", \"DenoLimit\": \"1\", \"QRPrt\": \"0\", \"DiscRejUpload\": \"1\", \"FSErrCode\": \"1\", \"LoginSW\": \"0\" } }, \"WorkModeSet\": { \"ModeSet\": { \"MultiSort\": \"0\", \"SortATM\": \"0\", \"Count\": \"0\", \"MixCount\": \"1\", \"Version\": \"0\", \"AutoVer\": \"0\", \"UpDown\": \"0\", \"FaceRear\": \"0\", \"Unfit\": \"0\" }, \"PocketPreset\": { \"Stacker1\": \"100\", \"Stacker2\": \"100\", \"Stacker3\": \"0\", \"Stacker4\": \"0\", \"Stacker5\": \"0\", \"Stacker6\": \"0\", \"Stacker7\": \"0\", \"Stacker8\": \"0\", \"RejPort1\": \"100\", \"RejPort2\": \"0\" } }, \"SortSet\": { \"USD\": { \"Val_100\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_50\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_20\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_10\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_5\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_2\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_1\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" } }, \"EUR\": { \"Val_500\": { \"SortLevel\": \"1\", \"ATMLevel\": \"4\", \"FitLevel\": \"2\" }, \"Val_200\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_100\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_50\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_20\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_10\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_5\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" } }, \"GBP\": { \"Val_50\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_20\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_10\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_5\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" } }, \"CHF\": { \"Val_1000\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_200\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_100\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_50\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_20\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" }, \"Val_10\": { \"SortLevel\": \"0\", \"ATMLevel\": \"0\", \"FitLevel\": \"0\" } } }, \"MCtrlSet\": { \"AuthenSW\": { \"DiscriMasterSW\": \"1\", \"IRSW\": \"1\", \"PenmarkSW\": \"1\", \"FluorSW\": \"1\", \"MagnetSW\": \"1\", \"ThickSW\": \"1\", \"DamageSW\": \"0\", \"DogearSW\": \"1\", \"FullSpeedSW\": \"0\", \"TakeNoteSW\": \"0\", \"Position4DualSW\": \"0\", \"PlasticsSW\": \"0\", \"AddSW\": \"0\", \"AutoRotationSW\": \"0\" }, \"SpeedDebug\": { \"FeedingMotor\": \"0\", \"RejNoteMotor\": \"0\", \"DriveMotor\": \"1\", \"Pocket1TurnPlate\": \"1\", \"Pocket2TurnPlate\": \"0\", \"ImpellerMotor\": \"0\", \"AgingTest\": \"1\", \"FeedingMotorPWM\": \"272\", \"RejNoteMotorPWM\": \"277\", \"DriveMotorPWM\": \"2300\" }, \"MotorSet\": { \"FeedingMotorType\": \"IRM\", \"RejNoteMotorType\": \"IRM\", \"MTransMotorType\": \"IRM\", \"FeedingSpeed\": \"IRM\", \"DutyRatio\": \"1:1.0\" } }, \"MagSet\": { \"ForeignCCY\": { \"SMag\": \"5\", \"MSMag\": \"6\", \"MMag\": \"5\", \"Reserv\": \"6\" } }, \"ThickSet\": { \"ThickThreshold\": { \"LThk1\": \"1804\", \"LThk2\": \"1606\", \"LThk3\": \"1507\", \"LThk4\": \"1525\", \"LThk5\": \"1517\", \"LThk6\": \"1821\", \"RThk1\": \"1802\", \"RThk2\": \"1403\", \"RThk3\": \"1532\", \"RThk4\": \"1824\", \"RThk5\": \"1623\", \"RThk6\": \"1866\", \"Dogear\": \"0\", \"AbnPt\": \"12\", \"ThresholdSW\": \"0\" } }, \"ImgSet\": { \"CorrectionSW\": \"0\", \"ImgSaveSW\": \"0\", \"NewOldSW\": \"0\", \"ParaDefaultSW\": \"0\", \"TenderSW\": \"1\", \"ImgDiscriSW\": \"1\", \"OldVerSW\": \"1\", \"Info1SW\": \"0\", \"Info2SW\": \"0\", \"ProgTimeTestSW\": \"0\", \"DistributeInfoSW\": \"0\", \"SmallDenoSW\": \"1\", \"ImgStudySW\": \"0\", \"CommemoraSW\": \"0\", \"DimensionSW\": \"1\", \"VisLtRefGSW\": \"1\", \"VisLtPerspGSW\": \"1\", \"IRReflGSW\": \"1\", \"IRPerspG\": \"1\", \"FluorGSW\": \"1\", \"GraphMagSW\": \"1\", \"MetalThdMagSW\": \"1\", \"OptVarPrtGSW\": \"1\", \"OptMetalThdFeaSW\": \"0\", \"FineHollowGSW\": \"1\", \"EFeatureSW\": \"0\", \"SpectralAbsFeaSW\": \"1\", \"TranspWinFeaSW\": \"1\", \"WaterMarkSW\": \"1\", \"SerialNoSW\": \"1\", \"ThicknessSW\": \"1\", \"OtherFeaSW\": \"0\", \"UnfitSW\": \"1\", \"ImgDiscriRejSW\": \"1\", \"ULDiscRejSW\": \"1\", \"ThickFinancialStandardSW\": \"0\" }, \"SystemInfo\": { \"MachNo\": \"3002014833\", \"MCtrlVer\": \"ZQ3201__APP:2024072301__BOOT:V1__LOGIC:20180004\", \"MagVer\": \"CNY_L_GA3201_240729_00_B4\", \"ThickVer\": \"APP:TH31_20231220_00_ZJ BOOT:200423_01\", \"LCDVer\": \"V5.0_240801_R0\", \"PluginVer\": \"PLG_V4.0_240711_R0\", \"NetVer\": \"V4.0_NET:240717_00\", \"CommVer\": \"COMMLAYER_VER_240722R0\", \"LogicVer\": \"V_FPGA:00290076_20220713\", \"ImgVer\": \"IMG:QFJV20240731-2569\", \"OCRVer\": \"VOCR:240731_D0\", \"Emmc\": \"EMMC:P3-72_P4-9_U-0\" } } }";
int main()
{
    struct json_object *json_parse;
    struct json_object *recvObj_buf;
    recvObj_buf = json_tokener_parse(recvJson_buf);
    json_object_object_get_ex(recvObj_buf,"RequestCode", &json_parse);
    printf("object: %s\n", json_object_get_string(json_parse));
    json_object_object_get_ex(recvObj_buf,"DeviceNum", &json_parse);
    printf("object: %s\n", json_object_get_string(json_parse));
    return 0;
}

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

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

相关文章

Java设计模式(命令模式)

定义 将一个请求封装为一个对象&#xff0c;从而让你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 角色 抽象命令类&#xff08;Command&#xff09;&#xff1a;声明用于执行请求的execute方法&#xff0c;通…

CSS实现hover时文本上下出现线条

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>复杂Hover效果示例</title><style>p {f…

【案例38】Can’t get connection from database 排查详细记录

问题现象 客户要搭建灰度环境&#xff0c;启动后&#xff0c;登录超级管理员报连接不上数据库的错误。 Can’t get connection from database(XXX) 问题分析 1、一般碰到这个问题&#xff0c;初步就开始怀疑是sysconfig数据源不通导致的。 发现数据源是通的。 2、在sysconf…

【案例40】Apache中mod_proxy模块的使用

NC中间件 应用场景&#xff1a;配置了apache的情况&#xff0c;包括uap集群&#xff0c;配置https等场景下均适用&#xff1b;如果是单机&#xff08;NC单结点情况不存在问题&#xff0c;则不用配置这项; was环境也不用配置此项。&#xff09; 解决方案&#xff1a;按如下两…

【15.PIE-Engine案例——加载Landsat 8 SR数据集】

加载Landsat 8 SR数据集 原始路径 欢迎大家登录航天宏图官网查看本案例原始来源 最终结果 具体代码 /*** File : Landsat8SRImages* Time : 2020/7/21* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : (C)Copyright 航天宏图信息技…

【C++】BFS解决Floodfill问题

目录 Floodfill算法介绍 解决方法 BFS 图画渲染 算法思路&#xff1a; 代码实现&#xff1a; 岛屿数量 算法思路 代码实现 岛屿的最大面积 算法思想 代码实现 被围绕的区域 算法思路 代码实现 总结&#xff1a; Floodfill算法介绍 Floodfill翻译过来就是“洪…

serial靶机渗透~反序列化

反序列化又叫对象注入&#xff0c;序列化在内部没有漏洞&#xff0c;漏洞产生是因为程序在处理对象、魔术函数以及序列化相关的问题导致的&#xff0c;当传给 unserialize()的参数可控时&#xff0c;那么用户就可以注入 payload&#xff0c;进行反序列化的时候就可能触发对象中…

【iOS】AutoreleasePool自动释放池的实现原理

目录 ARC与MRC项目中的main函数自动释放池autoreleasepool {}实现原理AutoreleasePoolPage总结 objc_autoreleasePoolPush的源码分析autoreleaseNewPageautoreleaseFullPageautoreleaseNoPage autoreleaseFast总结 autorelease方法源码分析objc_autoreleasePoolPop的源码分析po…

Html详解——Vue基础

HTML是什么&#xff1f; 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是&#xff1a;一组段落、一个重点信息列表、也可以含有图片和数据表…

山海关古城信息管理测试--片区

1.片区的检验名称编号是否重复 1.1controller添加两个方法&#xff0c;检验片区编号和检验片区名称 作用为&#xff1a;调用方法判断片区编号与片区名称是否重复&#xff0c;并返回返回值 /*** 检验片区编号是否重复*/PostMapping( "/checkPqbhUnique")ResponseBody…

深度解密CRLF注入与重定向漏洞:从原理到实践

在网络安全的世界中&#xff0c;CRLF注入和重定向漏洞常常被视为潜在的威胁&#xff0c;可能导致信息泄露和用户误导等严重后果。CRLF注入利用换行符在HTTP响应中插入恶意代码&#xff0c;而重定向漏洞则可能将用户引导至恶意网站。理解这些漏洞的原理及其复现方法&#xff0c;…

一文了解服务器和电脑主机的区别及各自优势

服务器和电脑主机的区别主要是&#xff1a;服务器专为处理大量数据和网络服务设计&#xff0c;具备高性能、高稳定性和可扩展性&#xff0c;通常用于数据中心或大型企业环境&#xff1b;而电脑主机则面向个人用户&#xff0c;主要用于日常办公、娱乐等通用任务&#xff0c;成本…

【QT】Qt中Websocket的使用

一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;…

HelloWorld驱动编写和加载驱动实验

HelloWorld驱动编写和加载驱动实验 Helloworld驱动实验驱动编写驱动的基本框架 内核模块实验设置交叉编译器找到RK3568平台交叉编译器&#xff1a;解压交叉编译器&#xff1a;设置全局的交叉编译器环境验证交叉编译器环境 编写Makefile编译模块模块的加载与卸载查看模块信息 He…

WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一

一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种&#xff0c;在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看&#xff0c;对讲机经历了从模拟到数字的转型&#xff0c;以及从简单通信工具向多功能设备的演进。当…

LVS实验——部署DR模式集群

目录 一、实验环境 二、配置 1、LVS 2、router 3、client 4、RS 三、配置策略 四、测试 1.Director服务器采用双IP桥接网络&#xff0c;一个是VPP&#xff0c;一个DIP 2.Web服务器采用和DIP相同的网段和Director连接 3.每个Web服务器配置VIP 4.每个web服务器可以出外网…

【Python机器学习】回归——缩减系数来“理解”数据

如果数据特征比样本点还多&#xff0c;是不可以使用线性回归的&#xff0c;因为在计算的时候会出错。 如果特征比样本点还多&#xff08;n>m&#xff09;&#xff0c;也就是说输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出问题。 为了解决上述问题&#xff0c;可以…

贪心算法的初涉(双指针 + “过山车思想”)

“过山车”思想 首先我们用一道力扣的题目&#xff0c;来简单了解一下“过山车思想” 3228. 将 1 移动到末尾的最大操作次数 - 力扣&#xff08;LeetCode&#xff09; 给你一个 二进制字符串 s。 你可以对这个字符串执行 任意次 下述操作&#xff1a; 选择字符串中的任一…

京东京造的C2M供应链模式

京东自有品牌业务于2018年1月正式上线&#xff0c;在京东发展已久&#xff0c;依托京东供应链优势&#xff0c;已搭建出京东京造、惠寻、佳佰等多品牌矩阵。 京东给零售企业释放出了一个讯号&#xff1a;C2M崛起&#xff0c;消费者的需求开始走向多元化和个性化&#xff01; …

徐州市委书记宋乐伟一行莅临非凸科技徐州分公司调研

7月23日&#xff0c;徐州市委书记宋乐伟一行莅临非凸科技徐州分公司调研&#xff0c;详细了解非凸科技数智交易产品的生态体系以及AI算力赋能的实践成果&#xff0c;并就相关工作进行了现场指导与交流。 非凸科技徐州分公司位于淮海路经济区金融服务中心云盛大厦&#xff0c;致…