首页 > 其他分享 >protobuf 和 json 互转

protobuf 和 json 互转

时间:2024-04-14 13:44:44浏览次数:26  
标签:google const protobuf util json 互转 string

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;
}



标签:google,const,protobuf,util,json,互转,string
From: https://www.cnblogs.com/itfanr/p/18134066

相关文章

  • 如何使用groovy反序列化json
    使用Groovy反序列化JSON可以通过以下步骤实现:导入相关的Groovy库:在Groovy脚本或Groovy项目中,首先需要导入相关的Groovy库,以便使用JSON反序列化的功能。可以使用以下代码导入库:importgroovy.json.JsonSlurper复制创建JsonSlurper对象:JsonSlurper是Groovy提供的一个用于解......
  • 关于中文、字符互转
    序知周所众在计算机中,所有的数据在存储和运算时都要使用二进制数表示例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示于是就产生了编码而我国字符编码也有几套标准,如GB2312、GBK、GB18030等脑......
  • 从Google网页中通过正则表达式获取json如何转换unicode对象
    场景:Google爬虫,获取下拉框搜索关键词,需要获取页面的里面的json字符串如下面:'{\\x22aa\\x22:{},\\x22abd\\x22:{\\x22abd\\x22:false,\\x22deb\\x22:false,\\x22det\\x22:false},\\x22async\\x22:{},\\x22attn\\x22:{},\\x22bgd\\x22:{\\x22ac\\x22:true,\\x......
  • Python+FastJson漏洞批量检测实战
    #-*-coding:utf-8-*-importosimportsubprocess#指定要读取文件的目录directory='D:/gongju02/anq/FastJson/JsonExp-1.4.0'defjson_exp(text_path):"""指定要检测的接口文件目录"""try:#改变当前工作目录os.chdir(di......
  • FastJson反序列化漏洞利用和扫描探测工具-实战
    一、简介fastjson漏洞批量检测工具,根据现有payload,检测目标是否存在fastjson或jackson漏洞(工具仅用于检测漏洞),若存在漏洞,可根据对应payload进行后渗透利用,若出现新的漏洞时,可将最新的payload新增至txt中(需修改格式),工具完全替代手工检测,作为辅助工具使用。二、LDAP检测环境搭建......
  • 使用内置函数 (SQL Server) 验证、查询和更改 JSON 数据
    使用内置函数(SQLServer)验证、查询和更改JSON数据项目2023/09/0313个参与者反馈 本文内容此页上的示例JSON文本使用ISJSON函数验证JSON文本使用JSON_VALUE函数从JSON文本中提取值使用JSON_QUERY函数从JSON文本中提取对象或数组显示另外......
  • Protobuf_动态消息-反射
    protobufprotoc版本协议文件版本message消息中承载的数据分别对应于每一个字段都有一个名字和一种类型optionalrepeated:在格式正确的消息中,此字段类型可以重复零次或多次。系统会保留重复值的顺序字段规则字段类型字段名称=字段编号[default=0];......
  • 二维字符串数组的传参时与指针互转时的问题
    二维数组如何传参二维字符串数组,转char**会导致的问题,以及编译报错要想得到正确的结果,需要按如下方式去写传参:#include<stdio.h>#include<string.h>//intchar_arr_copy(char**dest)//这样定义传参类型将导致编译报错,在低版本的编译器下或者没有报错但是得不到正确......
  • JSON.parse() 方法中里面有函数,转化完成后是字符串问题
    要将JSON字符串中的函数还原回原来的函数对象,你可以使用JSON.parse()方法,并提供一个reviver函数来将字符串表示的函数重新转换为函数对象。以下是你可以使用的代码示例:varobj={"name":"Runoob","alexa":function(){return10000;},"site":"www.runoob.com"};//......
  • 量化系统JSON数据包组织数据(全)
    {'timetag':'2024041209:40:21',--时间'lastPrice':9.02,--最新价'open':8.55,--开盘价'high':9.3,--当前最高价'low':8.4,--当天最低价'lastClose':8.48,--昨收盘'amount':11701.75,--成交量......