UsageExample

定义

syntax = "proto3";

message ModelDiffSenderConfig {
    string kafkaBrokerList = 1;
    string kafkaTopic = 2;
}

生成CPP文件

# generate proto struct
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:`pwd`/deps/protobuf/lib `pwd`/deps/protobuf/bin/protoc --proto_path=`pwd`/protobuf/proto --cpp_out=`pwd`/protobuf/gen-cpp diffModel.proto model_diff_sender_config.proto

输出JSON文件

//
// Created by bovenson on 18-10-11.
//
#include <iostream>
#include <fstream>
#include <fcntl.h>
#include <streambuf>

#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
#include "google/protobuf/util/json_util.h"
#include "model_diff_sender_config.pb.h"

int main() {
  ModelDiffSenderConfig modelDiffSenderConfig;
  modelDiffSenderConfig.set_kafkabrokerlist("localhost");

  // write to json file
  std::string jsonStr;
  google::protobuf::util::JsonPrintOptions jsonOptions;
  jsonOptions.add_whitespace = true;
  jsonOptions.always_print_primitive_fields = true;
  google::protobuf::util::MessageToJsonString(modelDiffSenderConfig, &jsonStr, jsonOptions);

  std::ofstream out("config.json", std::ofstream::out | std::ofstream::trunc);
  if (out.is_open()) {
    out << jsonStr;
    std::cout << "Json output OK" << std::endl;
  } else {
    std::cout << "ERROR: open file failed" << std::endl;
  }
  out.close();
  return 0;
}

config.json

{
 "kafkaBrokerList": "localhost",
 "kafkaTopic": ""
}

读取JSON配置文件

#include <iostream>
#include <fstream>
#include <fcntl.h>
#include <streambuf>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include <google/protobuf/util/json_util.h>

bool loadConfig (const std::string &filePath, ModelDiffSenderConfig &config) {
    std::ifstream in(filePath, std::ofstream::in);
    if (in.is_open()) {
        std::string jsonStr((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
        google::protobuf::util::JsonStringToMessage(jsonStr, &config);
    } else {
        std::cout << "[ERROR] config file can't open" << std::endl;
        return false;
    }
    return true;
}

int main() {
  ModelDiffSenderConfig modelDiffSenderConfig;
  loadConfig("config.json", modelDiffSenderConfig);
  std::cout << modelDiffSenderConfig.kafkabrokerlist() << std::endl;
  return 0;
}
/** Output
localhost
*/

最后更新于

这有帮助吗?