CentOS 7 使用cJSON 库

什么是JSON

JSON是一种轻量级的数据交换格式,可读性强、编写简单。键值对组合编写规则,键名使用双引号包裹,冒号:分隔符后面紧跟着数值,有两种常用的数据类型是对象和数组。

对象:使用花括号{}包裹起来的内容,数据结构{“key1”: “value1”, “key2”:“value2” …},key为对象的属性,value为对象的值。

数值:使用中括号[]包裹起来的内容,数据结构{“key”: [“value1”, “value2”, “value3” …]}。
 

CentOS 7 安装cJSON 库

cJSON Github 地址:https://github.com/DaveGamble/cJSON

步骤1:首先,你需要下载cJSON的源代码。你可以从https://github.com/DaveGamble/cJSON或者源代码官方网站下载。并上传至/usr/local/source_code/  

步骤2:下载完成后,需要将源代码解压,可以使用以下命令: 

[root@localhost source_code]# tar -zxvf cJSON-1.7.15.tar.gz

 步骤3:解压后,切换到源代码目录: 

[root@localhost source_code]# cd cJSON-1.7.15

步骤4:生成cJSON动态/静态库,执行如下指令: 

[root@localhost cJSON-1.7.15]# mkdir build
[root@localhost cJSON-1.7.15]# cd build/
[root@localhost build]# cmake ..
CMake Deprecation Warning at CMakeLists.txt:2 (cmake_minimum_required):Compatibility with CMake < 2.8.12 will be removed from a future version ofCMake.Update the VERSION argument <min> value or use a ...<max> suffix to tellCMake that the project does not need compatibility with older versions.-- The C compiler identification is GNU 8.3.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
******
[root@localhost build]# make && make install
[  2%] Building C object CMakeFiles/cjson.dir/cJSON.c.o
[  4%] Linking C shared library libcjson.so
[  4%] Built target cjson
[  6%] Building C object CMakeFiles/cJSON_test.dir/test.c.o
[  8%] Linking C executable cJSON_test
[  8%] Built target cJSON_test
[ 11%] Building C object tests/CMakeFiles/unity.dir/unity/src/unity.c.o
[ 13%] Linking C static library libunity.a
[ 13%] Built target unity
[ 15%] Building C object tests/CMakeFiles/print_number.dir/print_number.c.o
[ 17%] Linking C executable print_number
-- 省略--
[100%] Built target fuzz_main
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/include/cjson/cJSON.h
-- Installing: /usr/local/lib64/pkgconfig/libcjson.pc
-- Installing: /usr/local/lib64/libcjson.so.1.7.15
-- Installing: /usr/local/lib64/libcjson.so.1
-- Installing: /usr/local/lib64/libcjson.so
-- Installing: /usr/local/lib64/cmake/cJSON/cjson.cmake
-- Installing: /usr/local/lib64/cmake/cJSON/cjson-noconfig.cmake
-- Installing: /usr/local/lib64/cmake/cJSON/cJSONConfig.cmake
-- Installing: /usr/local/lib64/cmake/cJSON/cJSONConfigVersion.cmake

遇到的问题及解决办法

编译执行./test_cjson,提示如下截图错误信息:

[root@localhost cJSON_demo]# ./test_cjson
./test_cjson: error while loading shared libraries: libcjson.so.1: cannot open shared object file: No such file or directory

从报错的原因上看,本机上没有找到cJOSN类库的静态库/动态库libcjson.so。

首先检查/usr/local/lib 和/usr/local/include 目录中是否包含cjson 静态或动态库,可以执行如下指令:

ls /usr/local/lib | grep cjson
ls /usr/local/include | grep cjson

从上面分组 查询结果可知:cjson 没有在/usr/local/lib 库中生成cjson 静态/动态库链接。

再次查看cJOSN 在执行make && make install 指令时,对应cJSON 静态/动态库生成链接存放目录地址。

从上述截图可知cJSON 静态/动态库被安装到了/usr/local/lib64 目录中。

将/usr/local/lib64 目录添加至本机静态/动态库链接目录文件中,执行如下指令:

[root@localhost cJSON_demo]# cat /etc/ld.so.conf.d/usr-libs.conf
/usr/local/lib
[root@localhost cJSON_demo]# vi /etc/ld.so.conf.d/usr-libs.conf
[root@localhost ~]#  cat /etc/ld.so.conf.d/usr-libs.conf
/usr/local/lib
/usr/local/lib64
[root@localhost cJSON_demo]# sudo ldconfig

再次编译执行./test_cjson, Main 函数正确输出。

cJSON快速入门

在/usr/local/source_code 新增 cJSON_demo目录并新增test_cjson.c 文件,文件内容如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cjson/cJSON.h>int main()
{cJSON *json = NULL;cJSON *node = NULL;cJSON *tnode = NULL;cJSON *tnode2 = NULL;char *json_data = NULL;int i, j, size, size2;char *data = "{\"serialNumber\":\"212089842348362300\", \\"cellularInfo\":\[\{\"name\":\"ethernet0/0/1\",\\"switch\":\"0\"},\{\"name\":\"ethernet0/0/2\",\\"switch\":\"1\"},\{\"name\":\"ethernet0/0/3\",\\"switch\":\"0\"}\],\\"family\":[\"father\",\"mother\",\"brother\",\"sister\",\"somebody\"]\}";json = cJSON_Parse(data);json_data = cJSON_Print(json);printf("data: %s\n", json_data);free(json_data);node = cJSON_GetObjectItem(json,"serialNumber");if(node == NULL)printf("serialNumber: no\n");elseprintf("serialNumber: ok\n");node = cJSON_GetObjectItem(json, "family");if (node == NULL)printf("family: no\n");elseprintf("family: ok\n");if (node->type == cJSON_Array){printf("family array size is %d\n", cJSON_GetArraySize(node));size = cJSON_GetArraySize(node);for (i=0; i<size; i++){tnode = cJSON_GetArrayItem(node, i);if (tnode->type == cJSON_String)printf("%d: %s\n", i, tnode->valuestring);elseprintf("node type is not string, value = %d\n", tnode->type);}}node = cJSON_GetObjectItem(json, "cellularInfo");if(node == NULL)printf("cellularInfo: no\n");elseprintf("cellularInfo: ok\n");if (node->type == cJSON_Array){printf("cellularInfo array size is %d\n", cJSON_GetArraySize(node));size = cJSON_GetArraySize(node);for (i=0; i<size; i++){tnode = cJSON_GetArrayItem(node, i);if (tnode->type == cJSON_String)printf("%d: %s\n", i, tnode->valuestring);else if (tnode->type == cJSON_Object){size2 = cJSON_GetArraySize(tnode);for (j=0; j<size2; j++){tnode2 = cJSON_GetArrayItem(tnode, j);if (tnode2->type == cJSON_String)printf("%d-%d: %s\n", i, j, tnode2->valuestring);elseprintf("tnod2 type is err\n");}}elseprintf("node type is not string, value = %d\n", tnode->type);}}cJSON_Delete(json);return 0;
}

编译源码并执行:

[root@localhost cJSON_demo]# gcc -o test_cjson test_cjson.c -lcjson
[root@localhost cJSON_demo]# ./test_cjson
data: {"serialNumber": "212089842348362300","cellularInfo": [{"name": "ethernet0/0/1","switch":       "0"}, {"name": "ethernet0/0/2","switch":       "1"}, {"name": "ethernet0/0/3","switch":       "0"}],"family":       ["father", "mother", "brother", "sister", "somebody"]
}
serialNumber: ok
family: ok
family array size is 5
0: father
1: mother
2: brother
3: sister
4: somebody
cellularInfo: ok
cellularInfo array size is 3
0-0: ethernet0/0/1
0-1: 0
1-0: ethernet0/0/2
1-1: 1
2-0: ethernet0/0/3
2-1: 0

cJSON 参考资料

cJSON Github 官网地址:https://github.com/DaveGamble/cJSON

cJSON 开发参考: https://zhuanlan.zhihu.com/p/55095477?utm_oi=892471685738024960

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

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

相关文章

DeepWalk: Online Learning of Social Representations(2014 ACM SIGKDD)

DeepWalk: Online Learning of Social Representations----《DeepWalk&#xff1a;用于图节点嵌入的在线机器学习算法》 DeepWalk 是将 word2vector 用到 GNN 上 DeepWalk&#xff1a; 将 Graph 的每个节点编码为一个 D 维向量&#xff08;无监督学习&#xff09;&#xff0c;E…

加班做报表被嘲低效!快用大数据分析工具

做数据分析报表很耗时间&#xff0c;因为不仅要解决多业务系统数据质量标准不一问题&#xff0c;还需要进行大量的公式计算、报表设计与制作。但那是以前&#xff0c;在大数据分析工具强势崛起的当下&#xff0c;这些工作都能交给大数据分析工具来做了。以前是花90%的时间做报表…

哈希表-set、map

当需要判断一个元素是否在集合中时&#xff0c;就使用哈希法 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。 哈希表中关键码就是数组的索引下标&#xff0c;然后通过…

【giszz笔记】产品设计标准流程【8】

&#xff08;续上回&#xff09; 真的没想到写了8个章节&#xff0c;想参考之前文章的&#xff0c;我把链接给到这里。 【giszz笔记】产品设计标准流程【7】-CSDN博客 【giszz笔记】产品设计标准流程【6】-CSDN博客 【giszz笔记】产品设计标准流程【5】-CSDN博客 【giszz笔…

苹果手机内存满了怎么清理?这里有你想要的答案!

手机内存不足是一个比较普遍的现象。由于现在手机应用程序的功能越来越强大&#xff0c;所以占用的内存也越来越大。同时用户会在手机中存储大量的数据&#xff0c;如照片、视频、文档等&#xff0c;这些都会占用大量的手机空间。那么&#xff0c;苹果手机内存满了怎么清理&…

Xilinx Zynq-7000系列FPGA任意尺寸图像缩放,提供两套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA图像缩放方案 3、设计思路详解HLS 图像缩放介绍 4、工程代码1&#xff1a;图像缩放 HDMI 输出PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程代码2&#xff1a;图像缩放 LCD 输出PL 端 FPGA 逻辑设计PS 端 SDK 软件设…

基于JAVA+SpringBoot+VUE+微信小程序的前后端分离咖啡小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会的快速发展和…

分布式篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、分布式幂等性如何设计?二、简单一次完整的 HTTP 请求所经历的步骤?三、说说你对分布式事务的了解前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

感恩节99句祝福语,感恩父母老师朋友亲人朋友们,永久快乐幸福

1、流星让夜空感动&#xff0c;生死让人生感动&#xff0c;爱情让生活感动&#xff0c;你让我感动&#xff0c;在感恩节真心祝福你比所有的人都开心快乐。 2、感恩节到了&#xff0c;想问候你一下&#xff0c;有太多的话语想要说&#xff0c;但是不知从何说起&#xff0c;还是用…

基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于北方苍鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

黑马点评笔记 redis缓存三大问题解决

文章目录 缓存问题缓存穿透问题的解决思路编码解决商品查询的缓存穿透问题 缓存雪崩问题及解决思路缓存击穿问题及解决思路问题分析使用锁来解决代码实现 逻辑过期方案代码实现 缓存问题 我们熟知的是用到缓存就会遇到缓存三大问题&#xff1a; 缓存穿透缓存击穿缓存雪崩 接…

科技赋能,创新发展!英码科技受邀参加2023中国创新创业成果交易会

11月17日至19日&#xff0c;2023中国创新创业成果交易会&#xff08;简称&#xff1a;创交会&#xff09;在广州市广交会展馆圆满举行。英码科技受邀参加本届创交会&#xff0c;并在会场展示了创新性的AIoT产品、深元AI引擎和行业热门解决方案。 据介绍&#xff0c;本届创交会由…

人工智能基础_机器学习047_用逻辑回归实现二分类以上的多分类_手写代码实现逻辑回归OVR概率计算---人工智能工作笔记0087

然后我们再来看一下如何我们自己使用代码实现逻辑回归的,对二分类以上,比如三分类的概率计算 我们还是使用莺尾花数据 首先我们把公式写出来 def sigmoid(z): 定义出来这个函数 可以看看到这需要我们理解OVR是如何进行多分类的,我们先来看这个 OVR分类器 思想 OVR(One-vs-…

越南服务器租用:企业在越南办工厂的趋势与当地(ERP/OA等)系统部署的重要性

近年来&#xff0c;越南逐渐成为全球企业布局的热门目的地之一。许多企业纷纷选择在越南设立工厂&#xff0c;以利用其低廉的劳动力成本和优越的地理位置。随着企业在越南的扩张&#xff0c;对于当地部署ERP系统或OA系统等的需求也日益增长。在这种情况下&#xff0c;租用越南服…

YOLOV5标注训练自己的数据全流程教程

概述 yolo在目标检测领域是非常有代表性的模型&#xff0c;它速度快识别效果也很精准&#xff0c;是实时检测模型中应用最广泛的。yolo的原理和代码是很容易获得的&#xff0c;且有各式各样的教程&#xff0c;但是模型怎么使用的教程相对比较少。本文讲解如何使用yolov5模型训…

快速上手Banana Pi BPI-M4 Zero 全志科技H618开源硬件开发开发板

Linux[编辑] 准备[编辑] 1. Linux镜像支持SD卡或EMMC启动&#xff0c;并且会优先从SD卡启动。 2. 建议使用A1级卡&#xff0c;至少8GB。 3. 如果您想从 SD 卡启动&#xff0c;请确保可启动 EMMC 已格式化。 4. 如果您想从 EMMC 启动并使用 Sdcard 作为存储&#xff0c;请确…

SQLite3

数据库简介 常用的数据库 大型数据库&#xff1a;Oracle 中型数据库&#xff1a;Server 是微软开发的数据库产品&#xff0c;主要支持 windows 平台。 小型数据库&#xff1a;mySQL 是一个小型关系型数据库管理系统&#xff0c;开放源码 。(嵌入式不需要存储太多数据。) SQL…

机器学习算法(1)——简单线性回归

一、说明 在在这篇文章中&#xff0c;我们将学习我们的第一个机器学习算法&#xff0c;称为简单线性回归。这是一个重要的算法&#xff0c;因为当您可能正在学习第一个神经网络&#xff08;称为人工神经网络&#xff09;时&#xff0c;在此算法中学习的技术也适用于深度学习。我…

阿里云经济型e实例云服务器怎么样?性能测评

阿里云服务器ECS推出经济型e系列&#xff0c;经济型e实例是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理…

弄懂Rust编程中的Trait

1.定义 trait trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话&#xff…