ubuntu16 jsoncpp1.9编译及使用

文章目录

    • 前言
    • 1. 下载jsoncpp
    • 2. 解压并安装
    • 3.编译
    • 4.使用
      • (1)创建项目文件夹,编写main.cpp文件。如下:
      • (2)新建一个config.json的json文件:
      • (3)创建CMakeLists.txt文件,内容如下:
      • (4)新建build文件夹
    • 后记

前言

网上现有教程存在各种问题,比如

  1. jsoncpp是很老的版本。
  2. 直接运行高版本安装包中提供的python脚本,在使用时会导致链接库等问题。
  3. 使用CMake编译,需要用到CMakeLists.txt,而网上没有教你怎么写的。
  4. 最后,最核心的一个问题,网上的教程没有说清楚CMake之后要怎么在项目中使用。

tip: 要首先安装好cmake,网上有很多教程。
可以参考这篇文章:

https://blog.csdn.net/freemote/article/details/103454801

1. 下载jsoncpp

https://github.com/open-source-parsers/jsoncpp/releases
在这个里面有各种版本的jsoncpp,选择自己需要的版本,点进去之后拉倒最下面,选择tar.gz文件下载。

2. 解压并安装

将下载好的jsoncpp压缩文件拷贝到ubuntu虚拟机中,用tar zxvf命令解压,得到一个文件夹。

3.编译

进入到这个文件夹中,新建build文件夹,进入build文件夹,执行cmake ..,完毕后执行make命令,然后再执行make install命令。(注意make install命令可能需要sudo权限,否则会报错)

4.使用

(1)创建项目文件夹,编写main.cpp文件。如下:

#include 
#include 
#include 
#include 
#include "json/json.h"

void demo_simple();
int main() 
{
    demo_simple();
    return 0;
}

void demo_simple()
{
    std::ifstream ifs;
    ifs.open("/home/hanson/testForDACP/testJsoncpp/config.json");
    assert(ifs.is_open());
 
    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ifs, root, false))
    {
        std::cerr << "parse failed \n";
        return;
    }
 
    std::string name = root["name"].asString(); // 实际字段保存在这里
    int age = root["age"].asInt(); // 这是整型,转化是指定类型

    std::cout << name << std::endl;
    std::cout << age << std:: endl;
}

tip: 注意将json文件的路径改过来。

(2)新建一个config.json的json文件:

{
    "name":"hanson",
    "age":25
}

(3)创建CMakeLists.txt文件,内容如下:

cmake_minimum_required(VERSION 3.4.1) //允许最小版本
project(main)//项目名称

add_executable(main main.cpp) //main.app是自己编写的测试文件,前面的main表示生成可执行文件main
TARGET_LINK_LIBRARIES(main libjsoncpp.so.1.9.0) //添加动态链接库,如果没有这一条,编译会报错。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") //

tip:用的时候不要加注释,否则报错。

(4)新建build文件夹

进入build文件夹,执行cmake ..,其中的两个点表示cmake使用的是上一层目录中的CMakeLists文件。

成功后执行make命令,此时已经在build中生成了名称为main的可执行文件。

./main 执行即可。

后记

踩了很多坑总结出来的,里面的tip都是改了好久的错误,一定要注意。
我按着这个流程又重新做了一遍,是可以的。

你可能感兴趣的:(ubuntu,json,c++)