代码之家  ›  专栏  ›  技术社区  ›  coolk

如何使protobuf不区分大小写?

  •  1
  • coolk  · 技术社区  · 8 年前

    我有这样的协议,

    message Car{ string carId = 1; }

    我从这个契约生成java类,并使用它来解析JSON请求。

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Luc    8 年前

    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名称和 原型字段名称。

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