首页 > 其他分享 >jsoncpp的安装及使用

jsoncpp的安装及使用

时间:2024-06-13 14:54:18浏览次数:11  
标签:安装 JSON jsoncpp 编译 Json 使用 root

目录

前言

本文操作均在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::StreamWriterBuilder
    Json::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::CharReaderBuilder
    Json::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

标签:安装,JSON,jsoncpp,编译,Json,使用,root
From: https://www.cnblogs.com/paw5zx/p/18245875

相关文章

  • DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门
    场景DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139631755以上使用流水线配置和打包springboot后台项目,如果要使用流水线和配置node打包vue项目,可按如下步骤。注:博......
  • 关于RTthread使用PWM的总结经验(基于STM32F4系列)
    目录硬件资源介绍:前期准备:代码编写:总结:硬件资源介绍:笔者使用的是STM32F407VET6是魔女开发板,因为RT不支持CMSIS-DAP烧录,所以我又准备了一个ST-link,一个红色的LED。我所使用的是TIM2-CH3通道,在我这个板子上对应的是PA2口。原理图如下所示。可以看到PA2上对应的有TIM2_......
  • Huggingface使用
    模型下载借助gitlfs下载该方式会将模型整体目录下载到当前目录下$gitlfsinstall$gitclonehttps://huggingface.co/THUDM/chatglm3-6b$gitclonehttps://huggingface.co/BAAI/bge-large-zh代码直接下载需要开启代理jupyter有可能不支持,需要切换到终端里面执行......
  • linux下pyenv的安装和使用
    pyenv可以根据需求使用户在系统里安装和管理多个Python版本:配置当前用户的python的版本配置当前shell的python版本配置某个项目(目录及子目录)的python版本配置多个虚拟环境 一、安装pyenv1、安装pyenvcurl-Lhttps://github.com/pyenv/pyenv-installer/raw/master......
  • C#中使用AutoResetEvent或者ManualResetEvent做线程管理
    1.Task/thread/sync/async..await/WhenAll相关基础知识参见此处链接2.什么是AutoResetEvent和ManualResetEvent事件他们都是C#中System.Threading下面的类。用于在多个线程之间进行事件通知和管理。他们的管理方法主要是三个:Reset():关闭WaitOne():阻挡Set():启动AutoR......
  • anaconda里虚拟环境安装jupyter notebook
    安装jupyternotebook打开anacondaprompt,进入虚拟环境condaactivatePytorch_learning下载安装jupyternotebookcondainstalljupyternotebook或用pip安装pipinstalljupyter运行jupyternotebook进入环境之后,输入命令jupyternotebook运行完成后会自动打开浏......
  • 微信小程序分销商城源码系统 致力于中小企业低成本建站 带完整的安装代码包以及搭建教
    系统概述微信小程序凭借其无需下载、即用即走的特点,已成为连接用户与服务的重要桥梁。微信小程序分销商城源码系统正是基于微信小程序平台,集商品展示、在线交易、分销推广、订单管理等功能于一体的综合电商解决方案。该系统设计之初,就充分考虑了中小企业的实际需求,力求在不增......
  • 多校园跑腿小程序源码系统 帮取+代拿+外卖配送 功能超多 带完整的安装代码包+搭建部署
    系统概述多校园跑腿小程序源码系统是一款基于微信小程序平台开发的全功能校园服务应用。该系统采用先进的前后端分离架构,结合云服务技术,确保了系统的高可用性、可扩展性和安全性。系统设计之初就充分考虑到了多校园环境的特殊性,支持多校区独立运营或跨校联合运营模式,满足不同......
  • OpenEuler22.03安装openGauss5.0.2LTS版本
    OpenEuler22.03安装openGauss5.0.2LTS版本文章目录OpenEuler22.03安装openGauss5.0.2LTS版本一、安装规划二、安装准备2.1修改主机名2.2安装依赖2.3同步时间2.4关闭防火墙2.5关闭selinux2.6关闭透明大页2.7重启机器2.8设置网卡MTU2.9设置字符......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......