-
测试环境
- ubuntu16.04 64bit
- protocbuf:3.9.1 (支持json转换需>=3.0.0)
-
协议
cppsyntax = "proto2"; message Person{ optional string name = 1; optional uint32 age = 2; optional string address = 3; } -
测试代码
cpp//protobuf >= 3.0.0 #include "person.pb.h" #include "google/protobuf/stubs/stringpiece.h" #include "google/protobuf/util/json_util.h" #include <iostream> bool proto_to_json(const google::protobuf::Message& message, std::string& json) { google::protobuf::util::JsonPrintOptions options; // options.add_whitespace = true; return MessageToJsonString(message, &json, options).ok(); } bool json_to_proto(const std::string& json, google::protobuf::Message& message) { google::protobuf::util::JsonParseOptions options; return JsonStringToMessage(json, &message, options).ok(); } int main(int argc, char* argv[]){ std::string person_json; Person person; person.set_name("hb"); person.set_age(20); person.set_address("sjz"); if (!proto_to_json(person, person_json)) { std::cout << "pb to json failed!" << std::endl; }else{ std::cout << "pb to json:" << person_json << std::endl; } person.Clear(); person_json.clear(); person_json = "{\"name\": \"HB\", \"age\": 22, \"address\": \"SJZ\" }"; if (!json_to_proto(person_json, person)) { std::cout << "json to pb failed!" << std::endl; }else{ std::cout << "json to pb: name:" << person.name() << " age:" << person.age() << " address:" << person.address() << std::endl; } return 0; } -
编译
-
编译协议
powershellprotoc --cpp_out=. person.proto -
编译代码
powershellg++ person.pb.cc demo.cpp -lprotobuf -lpthread -o demo && ./demo
-
-
运行结果
powershellpb to json:{"name":"hb","age":20,"address":"sjz"} json to pb: name:HB age:22 address:SJZ
C/C++ protobuf与json互转
韩搏2024-01-26 23:00
相关推荐
Persistent的粽子!几秒前
C++:类与对象(一)库玛西23 分钟前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装2402_8828938632 分钟前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异今天要早睡_1 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析汉克老师2 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》闻缺陷则喜何志丹2 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor GAAA代码批发商2 小时前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记汉克老师2 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》程序猿编码2 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析影视飓风TIM3 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装