小弧光的博客

公众号:小弧光黑板报

导航

protobuf 和 json 互转

common.h

#ifndef COMMON_H
#define COMMON_H

#include "google/protobuf/message.h"
#include "nlohmann/json.hpp"
#include "google/protobuf/util/json_util.h"

using google::protobuf::util::MessageToJsonString;
using namespace google::protobuf::util;

google::protobuf::util::JsonOptions JsonOption();

google::protobuf::util::JsonParseOptions JsonParseOption();

nlohmann::json ProtoToJson(const google::protobuf::Message &proto);

int JsonToProto(const std::string& strJson, google::protobuf::Message *proto);


#endif

common.cpp

#include "common.h"


google::protobuf::util::JsonOptions JsonOption()
{
  google::protobuf::util::JsonOptions json_option;
  json_option.always_print_primitive_fields = true;
  return json_option;
}

google::protobuf::util::JsonParseOptions JsonParseOption()
{
  google::protobuf::util::JsonParseOptions json_option;
  json_option.ignore_unknown_fields = true;
  return json_option;
}

nlohmann::json ProtoToJson(const google::protobuf::Message &proto)
{
  static const auto kJsonOption = JsonOption();
  std::string json_string;
  const auto status = MessageToJsonString(proto, &json_string, kJsonOption);
  nlohmann::json json_obj = nlohmann::json::parse(json_string);
  return json_obj;
}

int JsonToProto(const std::string& strJson, google::protobuf::Message *proto)
{
  static const auto kJsonParseOption = JsonParseOption();
  const auto status = JsonStringToMessage(strJson, proto, kJsonParseOption);
  return 0;
}



posted on 2024-04-14 13:39  小弧光  阅读(113)  评论(0编辑  收藏  举报