1

我有一个这样的protobuf合同,

message Car{ string carId = 1; }

我从这个合同生成 java 类并用它来解析 JSON 请求。

现在,如果我的 JSON 具有“CarID”或“carid”,那么 protobuf 生成的 java 类将无法识别该字段。如何使其不区分大小写?

4

1 回答 1

2

protobuff 描述符 (.proto) 不区分大小写。如果您尝试编译:

message Car{
    string carId = 1;
    string carid =2;
}

您将遇到编译错误:

CARID_FIELD_NUMBER is already defined in ...

您还必须知道,对于 proto3,JSON 解析器正在处理 lowerCamelCase。如参考指南所述: https ://developers.google.com/protocol-buffers/docs/proto3#json

使用 proto 字段名称而不是 lowerCamelCase 名称:默认情况下,proto3 JSON 打印机应将字段名称转换为 lowerCamelCase 并将其用作 JSON 名称。实现可能会提供一个选项来使用 proto 字段名称作为 JSON 名称。Proto3 JSON 解析器需要接受转换后的 lowerCamelCase 名称和 proto 字段名称。

从您的解析器的角度来看,“carID”和“CarID”是相同的,因为它会自动将“CarID”转换为“carID”。但是“carId”和“carid”总是不同的。

于 2018-04-27T11:10:44.590 回答