
C++
protobufsyntax = "proto3";message Person { string name = 1; int32 age = 2;}接下来,我们使用Protobuf编译器生成C++代码。protoc -I=. --cpp_out=. person.proto生成的代码中包含了Person类的定义和相应的序列化与反序列化方法。接下来,我们可以使用第三方库(如RapidJSON)将Protobuf对象转换为JSON格式的字符串,或者将JSON字符串解析为Protobuf对象。下面是一个简单的示例代码:
cpp#include <IOStream>#include <string>#include "person.pb.h"#include "rapidJSon/document.h"#include "rapidJSon/writer.h"#include "rapidJSon/stringbuffer.h"using namespace rapidJSon;std::string protobufToJSon(const Person& person) { Document doc; doc.SetObject(); Value name; name.SetString(person.name().c_str(), doc.GetAllocator()); doc.AddMember("name", name, doc.GetAllocator()); Value age; age.SetInt(person.age()); doc.AddMember("age", age, doc.GetAllocator()); StringBuffer buffer; Writer<StringBuffer> writer(buffer); doc.Accept(writer); return buffer.GetString();}Person JSonToProtobuf(const std::string& JSon) { Person person; Document doc; doc.Parse(JSon.c_str()); if (doc.HasMember("name") && doc["name"].IsString()) { person.set_name(doc["name"].GetString()); } if (doc.HasMember("age") && doc["age"].IsInt()) { person.set_age(doc["age"].GetInt()); } return person;}int mAIn() { Person person; person.set_name("John"); person.set_age(30); std::string JSon = protobufToJSon(person); std::cout << "Protobuf to JSON: " << JSon << std::endl;</p> Person newPerson = JSonToProtobuf(JSon); std::cout << "JSON to Protobuf: " << newPerson.name() << ", " << newPerson.age() << std::endl;</p> return 0;}以上代码演示了如何将一个Person对象转换为JSON格式的字符串,并将该字符串解析为一个新的Person对象。输出结果将显示转换前后的数据。本文介绍了如何使用C++将Protobuf和JSON相互转换的方法,并提供了相应的代码示例。通过使用Protobuf和第三方库,我们可以轻松地实现这种转换,从而满足不同的需求。无论是在网络通信中还是在数据存储中,将数据在不同的格式之间进行转换是非常常见的操作。通过学习本文的内容,相信读者能够更好地理解和应用C++中的Protobuf和JSON转换技术。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号