Linux下jsoncpp的编译与使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010318270/article/details/82591246

一、cmake编译jsoncpp源码

(1)下载jsoncpp源码
源码地址:https://github.com/open-source-parsers/jsoncpp/tree/0.y.z
(2)解压源码

unzip jsoncpp-0.y.z.zip
cd jsoncpp-0.y.z

(3)使用cmake编译

$ mkdir -p build/debug
$ cd build/debug
$ cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=ON -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
$ make
// 查看生成的静态和动态链接库
$ find . -name *.a
./src/lib_json/libjsoncpp.a
$ find . -name *.so
./src/lib_json/libjsoncpp.so

二、使用jsoncpp
(1)创建项目目录jsoncppUsage
(2)创建文件jsonCppUsage.cpp

// jsonCppUsage.cpp
#include <iostream>
#include "json/json.h"

using namespace std;
 
int main()
{
    // 解析json串
    string message = "{ \"data\" : { \"username\" : \"test\" }, \"type\" : 6 }";
    Json::Reader reader(Json::Features::strictMode());
    Json::Value parseData;
    if (reader.parse(message.c_str(), parseData))
    {
        int type = parseData.get("type", 0).asInt();
        Json::Value frameData = parseData.get("data", 0);
        string username = frameData.get("username", 0).asString();
        printf("type: %d, username: %s\n", type, username.c_str());
    }
 
    // 生成json串
    Json::Value data;
    Json::Value frame;
    Json::FastWriter fastWriter;
 
    frame["type"] = 66;
    data["username"] = "test";
    frame["data"] = data;
 
    string result = fastWriter.write(frame);
    printf("result: %s \n", result.c_str());
 
    return 0;
}

(3)将jsoncpp头文件和生成的静态链接文件拷贝到项目目录(jsoncppUsage)

$ cp -rf jsoncpp-0.y.z/include jsoncppUsage
$ cp jsoncpp-0.y.z/build/debug/src/lib_json/libjsoncpp.a jsoncppUsage
$ tree jsoncppUsage/
jsoncppUsage/
├── include
│   └── json
│       ├── assertions.h
│       ├── autolink.h
│       ├── config.h
│       ├── features.h
│       ├── forwards.h
│       ├── json.h
│       ├── reader.h
│       ├── value.h
│       ├── version.h
│       └── writer.h
├── jsonCppUsage.cpp
└── libjsoncpp.a
$ g++ jsonCppUsage.cpp libjsoncpp.a -Iinclude
$ ./a.out 
type: 6, username: test
result: {"data":{"username":"test"},"type":66}

猜你喜欢

转载自blog.csdn.net/u010318270/article/details/82591246