protobuf-format-cj 快速开始:5分钟从编译构建到第一个 Protobuf JSON 序列化示例
2026/9/24 16:27:43 网站建设 项目流程

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 消息对象直接变成人类可读的文本格式,方便调试、日志输出或接口联调。

支持格式对应实现类典型场景
JSONJsonFormatAPI 联调、日志排查
XMLXmlFormat兼容传统系统
HTMLHtmlFormat浏览器直接查看
CouchDBCouchDBFormat文档数据库存储

四种格式都继承自 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 中声明(protobufcharset4cj两个 git 依赖)。

三、一键编译构建

依赖就位后,在项目根目录执行:

cjpm build

cjpm会根据 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):

  1. 创建Point对象并赋值latitude = 1longitude = 10
  2. 实例化JsonFormat()格式化器
  3. 调用json.print(a, out)写入输出流
  4. 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询