#json-object #convert-json #json #protobuf #message #converting #pb

bin+lib json2pb

将 JSON 对象转换为 protobuf 消息

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

Download history 16/week @ 2024-03-30 7/week @ 2024-04-06 38/week @ 2024-04-13 5/week @ 2024-04-20 16/week @ 2024-05-11 13/week @ 2024-05-18 1/week @ 2024-05-25 2/week @ 2024-06-01 3/week @ 2024-06-15 1/week @ 2024-06-22 24/week @ 2024-07-06 78/week @ 2024-07-13

每月下载量 105

Apache-2.0 协议

24KB
577 行代码(不含注释)

master Actions Status

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