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;
}
转载请注明原文链接:https://www.cnblogs.com/itfanr/p/18134066
公众号:小弧光黑板报