protobuf-format-cj 快速开始:5分钟从编译构建到第一个 Protobuf JSON 序列化示例
【免费下载链接】protobuf-format-cj根据 protobuf 数据,提供不同格式的序列化项目地址: https://gitcode.com/Cangjie-TPC/protobuf-format-cj
protobuf-format-cj是仓颉(Cangjie)生态中的开源序列化库,可以把protobuf 数据一键序列化成 JSON、XML、HTML、CouchDB 四种格式。本文带你用 5 分钟完成从依赖准备、cjpm build编译构建,到运行第一个Protobuf JSON 序列化示例的完整流程,新手也能轻松上手。
一、protobuf-format-cj 是什么?
一句话理解:它让 protobuf 消息对象直接变成人类可读的文本格式,方便调试、日志输出或接口联调。
| 支持格式 | 对应实现类 | 典型场景 |
|---|---|---|
| JSON | JsonFormat | API 联调、日志排查 |
| XML | XmlFormat | 兼容传统系统 |
| HTML | HtmlFormat | 浏览器直接查看 |
| CouchDB | CouchDBFormat | 文档数据库存储 |
四种格式都继承自 src/protobuf_formatter.cj 定义的抽象类ProtobufFormatter,接口统一,换格式只需换一个类名,这也是它"5分钟上手"的关键。
二、环境准备:一个依赖搞定
⚠️ 本项目已在Cangjie Version 1.0.0下验证通过。
protobuf-format-cj 依赖protobuf4cj库。克隆本仓库后,先克隆并构建依赖:
git clone https://gitcode.com/Cangjie-TPC/protobuf-format-cj cd protobuf-format-cj # 克隆依赖库并编译 git clone https://gitcode.com/Cangjie-TPC/protobuf4cj.git cd protobuf4cj && cjpm build && cd .. # 将构建完成的 protobuf 文件夹复制到项目根目录依赖来源在 cjpm.toml 中声明(protobuf与charset4cj两个 git 依赖)。
三、一键编译构建
依赖就位后,在项目根目录执行:
cjpm buildcjpm会根据 cjpm.toml 中的name = "protobuf_format"、output-type = "dynamic"等配置完成构建,产物输出到target目录。看到编译无报错,说明构建成功。✅
四、第一个 Protobuf JSON 序列化示例
示例基于 test/LLT/proto/route_guide.proto 定义的经典Point消息(经纬度坐标点),需要与其数据类文件 test/LLT/proto/route_guide.pb.cj 一起编译执行。
核心逻辑只有 4 步(完整代码见 test/DOC/Example01Test.cj):
- 创建
Point对象并赋值latitude = 1、longitude = 10 - 实例化
JsonFormat()格式化器 - 调用
json.print(a, out)写入输出流 - 从
ByteBuffer中取出结果字符串
执行后输出结果为:
{"latitude":1,"longitude":10}测试断言通过,终端打印:
[ PASSED ] CASE: Example01Test恭喜你,第一个 Protobuf JSON 序列化示例跑通了!🎉 最小用例参考 test/LLT/proto/pb2json.cj。
五、3 行切换 XML / HTML / CouchDB
得益于统一的ProtobufFormatter接口,换格式只改一个构造:
let f = XmlFormat() // XML let f = HtmlFormat() // HTML let f = CouchDBFormat() // CouchDB同一组数据的不同输出效果(摘自测试断言):
| 格式 | 输出示例 |
|---|---|
| XML | <Point><latitude>1</latitude><longitude>10</longitude></Point> |
| HTML | <html>...<span>latitude</span>: <span>1</span>... |
| CouchDB | {"latitude": 1,"longitude": 10} |
对应自测用例:pb2xml.cj、pb2html.cj、pb2cdb.cj。
另外,src/format_factory.cj 中的FormatFactory.createFormatter(...)支持按枚举值动态创建格式化器,适合需要运行时切换格式的场景。
六、项目结构速览
| 目录/文件 | 说明 |
|---|---|
| src/ | 库源码:四种格式实现、工具类、异常定义 |
| doc/feature_api.md | 完整 API 接口文档(推荐精读) |
| test/DOC/ | 文档示例用例(本文示例来源) |
| test/LLT/ | 自测用例与 proto 数据文件 |
| README.md | 项目说明与编译指南 |
更多接口细节(字符集设置、printToString快捷方法、HexUtils/TextUtils工具类等)请查阅 doc/feature_api.md。
七、常见问题(FAQ)
Q1:编译报错找不到 protobuf 依赖?确认已将protobuf4cj构建产物复制到项目根目录下,再重新cjpm build。
Q2:需要哪个仓颉版本?Cangjie1.0.0(见 cjpm.toml 中cjc-version配置)。
Q3:想自己扩展一种新格式怎么办?继承 src/abstract_char_based_formatter.cj 中的AbstractCharBasedFormatter,重写print方法即可。
Q4:项目协议是什么?基于 BSD 3-Clause 开源协议(见 LICENSE),可自由使用与参与贡献。
🚀 现在你已经掌握了 protobuf-format-cj 的完整上手路径:克隆仓库 → 准备 protobuf4cj 依赖 →cjpm build→ 四步写出 JSON 序列化。接下来不妨打开 doc/feature_api.md,把它变成你项目中第一个调试利器!
【免费下载链接】protobuf-format-cj根据 protobuf 数据,提供不同格式的序列化项目地址: https://gitcode.com/Cangjie-TPC/protobuf-format-cj
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考