cpp处理json常用的库

poco-json

poco库中处理json的模块,将其转换为json字符串时键名会按照字母的顺序排列

jsoncpp

jsoncpp这个库,将其转换为json字符串时键名也会按照字母的顺序排序

1,下载

jsonspp下载

2,安装

scons下载

使用scons来安装,如果yum没有找到,则需要更新yum库


yum install scons -y
编译jsoncpp

编译好的链接库,存放在jsoncpp源目录下的libs中libjson_linux-gcc-4.8.5_libmt.so,头文件放在include目录下


cd jsoncpp的源目录

scons platform=linux-gcc

protobuf

序列化,这个将其转换为json字符串时会按照message的顺序,比较的好。

1,使用步骤

先写proto的文件 status.proto

syntax = "proto3";
package biyi;

message UnifiedLog{
    Cont content = 1;
    string sign = 2;
}

message Cont{
    string time_iso8601 = 1;
    string companyId = 2;
    string company = 3;
    string projectNameCN = 4;
    string projectName = 5;
    string componentName = 6;
    string componentMethodName = 7;
    string componentType = 8;
    string componentVer = 9;
    string componentLang = 10;
    string userName = 11;

}
cpp调用

#include <iostream>
#include "../build/proto/status.pb.h"
#include <google/protobuf/util/json_util.h>

namespace proto = google::protobuf::util;

using namespace biyi;
using namespace std;

int main() {
    UnifiedLog uniLog;
    uniLog.set_sign(
        "68f3ea8baebbaddc5a47d6d955ecf53892edb4d3d8a3afe08cf4518204d30af5");
    uniLog.mutable_content()->set_time_iso8601("2020-03-09T11:11:14+08:00");
    uniLog.mutable_content()->set_companyid("000");
    uniLog.mutable_content()->set_company("ctsi");
    uniLog.mutable_content()->set_projectnamecn("001");
    uniLog.mutable_content()->set_projectname("biyi");
    uniLog.mutable_content()->set_componentname("micro-service-statics");
    uniLog.mutable_content()->set_componentmethodname("DemoBean.echo");
    uniLog.mutable_content()->set_componenttype("微服务组件");
    uniLog.mutable_content()->set_componentver("v1.0.0");
    uniLog.mutable_content()->set_componentlang("java");
    uniLog.mutable_content()->set_username("admin");

    cout << uniLog.sign() << endl;
    // message to json string
    string str;
    proto::Status status = proto::MessageToJsonString(uniLog, &str);
    if (!status.ok()) {
        cout << status.ToString() << endl;
    } else {
        cout << "str: " << str << endl;
    }

    return 0;
}