jsoncpp的安装及使用

news/2024/10/1 21:33:50

目录
  • 前言
  • 安装
    • 方法一:apt包管理器
    • 方法二:源码编译安装
  • 使用
    • 编写示例代码
      • 写JSON
      • 读JSON
    • 编译链接
    • 输出
      • 写JSON
      • 读JSON

前言

本文操作均在ubuntu20.04下进行。

安装

方法一:apt包管理器

①使用包管理器安装
这种方法比较简单,直接使用apt包管理器安装jsoncpp:

apt install libjsoncpp-dev

这条命令会安装jsoncpp的开发库和必需的文件

②查看头文件和库文件
安装完毕后我们可以去找一下jsoncpp的头文件和库文件
头文件位于/usr/include/jsoncpp/json/

库文件位于/usr/lib/x86_64-linux-gnu/

但是我们通过头文件的version.h和动态库文件的realname,可以知道使用apt包管理器安装的jsoncpp的版本号为1.7.4

那如果我需要安装的是jsoncpp的其他版本,就需要下载源代码并编译安装。

方法二:源码编译安装

①在开始编译前,首先要确保系统中安装了g++cmake

②下载jsoncpp源码
从github下载jsoncpp的特定版本并解压,以1.9.3为例:

wget https://github.com/open-source-parsers/jsoncpp/archive/1.9.3.tar.gz
tar xzf 1.9.3.tar.gz

③编译和安装
进入jsoncpp目录,使用cmake来配置项目并编译安装:

cd jsoncpp-1.9.3
mkdir build
cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make
make install

注意,在cmake ..后面加上了-DBUILD_SHARED_LIBS=ON选项,会生成静态库和共享库。若不添加,则只会生成静态库。

④查看头文件和库文件
通过此方法安装的jsoncpp,其头文件位于/usr/local/include/json/,库文件位于/usr/local/lib/

也不知道为啥,1.9.3版本的共享库soname是libjsoncpp.so.24

使用

编写示例代码

写JSON

#include <json/json.h>
#include <iostream>int main() 
{// 创建一个Json::Value对象Json::Value root;// 向对象中添加数据root["name"] = "John Doe";root["age"] = 30;root["isAlive"] = true;root["address"]["city"] = "New York";root["address"]["state"] = "NY";// 创建一个Json::StreamWriterBuilderJson::StreamWriterBuilder writer;// 将Json::Value对象转换为字符串std::string output = Json::writeString(writer, root);// 打印输出std::cout << output << std::endl;return 0;
}

读JSON

int main() 
{// JSON字符串std::string jsonString = R"({"name":"John Doe","age":30,"isAlive":true,"address":{"city":"New York","state":"NY"}})";// 创建一个Json::CharReaderBuilderJson::CharReaderBuilder builder;// 创建一个Json::Value对象Json::Value root;// 创建一个错误信息字符串std::string errors;// 解析JSON字符串std::unique_ptr<Json::CharReader> reader(builder.newCharReader());bool parsingSuccessful = reader->parse(jsonString.c_str(), jsonString.c_str() + jsonString.size(), &root, &errors);if (!parsingSuccessful) {// 打印错误信息并退出std::cout << "Error parsing JSON: " << errors << std::endl;return 1;}// 提取并打印数据std::cout << "Name: " << root["name"].asString() << std::endl;std::cout << "Age: " << root["age"].asInt() << std::endl;std::cout << "Is Alive: " << (root["isAlive"].asBool() ? "Yes" : "No") << std::endl;std::cout << "City: " << root["address"]["city"].asString() << std::endl;std::cout << "State: " << root["address"]["state"].asString() << std::endl;return 0;
}

编译链接

具体操作略
注意链接时要加上-ljsoncpp

输出

写JSON

读JSON

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

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

相关文章

达梦V8数据库备份还原

备份需先开启归档alter database mount;#设置归档路径 alter database add archivelog type=local,dest=/dm8/arch,file_size=64,space_limit=0;alter database archivelog; alter database open; #查数据库的状态、归档参数 select name,status$,ARCH_MODE from v$database; s…

vite+vue3展示文件夹内的所有组件

https://www.cnblogs.com/y-shmily/p/16546743.html在组件目录下新建index.jsimport { markRaw } from "vue"; const filesNameList = []; const files = import.meta.glob("./*.vue");for (const key in files) {const fileName = key.replace(/(\.\/|\.v…

龙哥量化:通达信今买明卖2024选股指标公式源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 XYZ_1:=MAX(MAX(HIGH-LOW,Abs(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));XYZ_2:=(HIGH+LOW)/2+MA(XYZ_1,2);XYZ_3:=(HIGH+LOW)/2-MA(XYZ_1,2);XYZ_4:=REF(XYZ_2,BArslAST(XYZ_2<=REF(XYZ_2,1)))…

如何使您的IT资产审计变得轻而易举?

无论您在审核准备方面处于哪个阶段,强大的资产管理策略都至关重要。 现在,不可否认的是最初的障碍——精确追踪每一台设备、软件许可证和外围设备可能会让人感到不知所措。然而,好消息是有简化流程可以帮助您将资产管理从一项令人望而却步的任务转变为高效的实践。 当您发…

keil 烧入程序 过慢 解决方法

1.打开魔术笔 2.点击 切换debug 3.点击 settings4. 把MHZ改成4,点击确定就OK了

CSRF漏洞复现及测试工具讲解

一、Python编写一个存在CSRF漏洞① 编写html网页<!DOCTYPE html> <html> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>转账</title&g…

redis自学(47)批处理优化

大量数据的导入的方式Redis提供的批处理方案M操作比Pipeline快,因为M操作是内部操作,原子操作,而Pipeline不是。集群下的批处理 如MSET或Pipeline这样的批处理需要在一次请求中携带多条命令,而此时如果redis是一个集群,那批处理命令的多个key必须落在一个插槽中,否则就会…

妙用OSGraph:发掘GitHub知识图谱上的开源故事

OSGraph (Open Source Graph) 是一个开源图谱关系洞察工具,基于GitHub开源数据全域图谱,实现开发者行为、项目社区生态的分析洞察。可以为开发者、项目Owner、开源布道师、社区运营等提供简洁直观的开源数据视图,帮助你和你的项目制作专属的开源名片、寻求契合的开发伙伴、挖…