5 个版本
0.2.1 | 2020年8月10日 |
---|---|
0.2.0 | 2020年8月9日 |
0.1.2 | 2020年8月9日 |
0.1.1 | 2020年8月8日 |
0.1.0 | 2020年8月8日 |
在 #pb 分类中排名第 12
每月下载量 105
24KB
577 行代码(不含注释)
json2pb
json2pb 是一个简单的命令行工具,可以将 JSON 对象转换为 protobuf 消息。
在重构过时的 RESTful API 时非常有用。
将 JSON 请求和响应转换为 pb 消息,并添加您自己的服务定义,很酷!
安装
- 您必须首先安装
rust
开发环境。 git clone https://github.com/caibirdme/json2pb.git
cd{dir}/json2pb
cargo安装 --path . --binj2pb
用法
j2pb -h
j2pb 0.1.0
ronaldoliu@tencent.com
convert json to protobuf3
USAGE:
j2pb [OPTIONS] -f <file>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f <file> specify json file name
-o <out> specify file to save generated proto(default: stdout)
示例
j2pb -f test.json
# this will print generated protobuf message on the screen(stdout)
j2pb -f test.json -o test.proto
# this will create test.proto file and save generated protobuf message in it
注意
proto 不支持嵌套数组
protobuf 本身不支持嵌套数组,因此您不能转换包含嵌套数组的 JSON,如下所示:
{
"foo": [
[1,2,3],
[4,5,6]
]
}
如果可能,将 double 转换为 int64
JSON 本身只支持 double 类型,但人们通常用它来存储整数。因此,json2pb 将尝试将一个符合以下两个约束的 double 值 T 转换为 int64
- (T.floor()-T).abs() < f64::EPSILON // 表示 T 是一个整数
-(2^53-1) <= T <= 2^53-1
// double 只能在这个范围内精确地存储整数
自动选择最可能的对象作为消息定义
我们经常看到这样的 JSON
{
"bar": [
{
"name": "deen"
},
{
"name": "caibirdme",
"age": 26
}
]
}
由于某些原因,某些元素可能不完整,因此 json2pb 将选择最可能的对象(具有最多键的对象)作为消息定义。
因此生成的消息将是
message root_data {
repeated Bar bar = 1;
message Bar {
string name = 1;
int64 age = 2;
}
}
依赖项
~3MB
~51K SLoC