jsoncpp+cmake使用

本文详细介绍了如何在Windows10和Linux系统中编译和使用jsoncpp库。首先通过git或下载zip文件获取源码,然后使用CMake配置并指定安装路径进行编译和安装。接着创建一个新的项目,将必要的cpp文件和CMakeLists.txt添加进去,并编写了示例代码展示如何读写JSON数据。最后提供了编译和运行项目的bat脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

1、本文内容
jsoncpp编译及其使用

2、平台
windows10, linux
3、转载请注明出处:
https://blog.csdn.net/qq_41102371/article/details/129300456

准备

clone源码

mkdir json
cd json
git clone https://github.com/open-source-parsers/jsoncpp.git

或者直接下载:https://codeload.github.com/open-source-parsers/jsoncpp/zip/refs/heads/master
解压到json文件夹下

编译

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="D:/carlos/install/jsoncpp" -S ./jsoncpp-master -B ./build
cmake --build ./build --config Release --target install

DCMAKE_INSTALL_PREFIX=D:/carlos/install/jsoncpp是指定编译完成后的安装路径,根据需要自行修改

使用

mkdir jsontest
cd jsontest
mkdir src

将cpp和CMakeLists.txt放入jsontest/src文件夹
把compile.bat和run.bat放进jsontest文件夹
在这里插入图片描述

jsontest.cpp

#include <iostream>
#include <fstream>

#include <json/json.h>

bool writeMapInfo(std::string file_path, Json::Value &root)
{

    std::cout << "\n\nwrite MapInfo to json file" << std::endl;

    Json::Value info;
    std::string name;
    int age;

    // 1
    name = "abc";
    age = 24;
    info["name"] = name;
    info["age"] = age;
    info["arr"][0] = 5.5;
    info["arr"][3] = 76.1;
    info["arr"][1] = 9.2;

    root["p1"] = info;

    // 2
    name = "def";
    age = 55;
    info["name"] = name;
    info["age"] = age;
    info["arr"][0] = 55.6;
    info["arr"][2] = 15.3;
    info["arr"][1] = 3.6;

    root["p2"] = info;

    Json::StyledWriter style_writer;
    std::string str = style_writer.write(root);

    std::ofstream file_out;
    file_out.open(file_path);
    if (!file_out.is_open())
    {
        std::cout << "open file" << file_path <<" failed!" << std::endl;
        return false;
    }
    {
        file_out << str;
        file_out.close();
    }
    return true;
}

bool loadMapInfo(std::string file_path, Json::Value &root)
{
    std::cout << "\n\nload MapInfo from json file" << std::endl;

    std::ifstream file_in;
    file_in.open(file_path);
    if (!file_in.is_open())
    {
        std::cout << "open " << file_path << " failed" << std::endl;
        return false;
    }
    else
    {
        file_in >> root;
        std::cout << "load from file:\n"
                  << root << std::endl;
    }
    return true;
}

int main(){
    Json::Value root;
    writeMapInfo("./test.json", root);
    loadMapInfo("./test.json", root);
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.18)

project(Jsontest LANGUAGES C CXX)

set(JSONCPP_DIR D:/carlos/install/jsoncpp)

include_directories(${JSONCPP_DIR}/include)
link_directories(${JSONCPP_DIR}/lib)

add_executable(jsontest ./jsontest.cpp)
target_link_libraries(jsontest jsoncpp)

compile.bat

cmake -S ./src -B ./build
cmake --build ./build --config Release --target ALL_BUILD

run.bat

@REM carlos 202303
set PATH=%PATH%;D:\carlos\install\jsoncpp\bin
.\build\Release\jsontest.exe

编译运行

./compile.bat
./run.bat

输出结果:
在这里插入图片描述
linux上将上述命令对应路径修改好就行

参考

https://blog.csdn.net/jiesunliu3215/article/details/125970395
https://blog.csdn.net/King_weng/article/details/88430199

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺有缸的高飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值