jsoncpp的安装及使用

前言

本文操作均在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

posted @ 2024-06-13 14:51  paw5zx  阅读(30)  评论(0编辑  收藏  举报