如何在 protobuf 结构中使用整数?

gmo*_*lau 6 int protocol-buffers

我注意到当将 Python 字典转换为 google.protobuf.Struct 时,整数会变成浮点数,即:

my_dict = {'id': 42}
Run Code Online (Sandbox Code Playgroud)

变成这样:

fields {
    key: "id"
    value {
        number_value: 42.0
    }
}
Run Code Online (Sandbox Code Playgroud)

这是非常不幸的,但是查看structproto 定义似乎这是设计使然,因为确实只有双精度值。

有谁知道这是什么原因,有没有办法解决这个问题,而无需手动跟踪哪些数字是整数,哪些是浮点数?

mar*_*seu 1

由于com.google.protobuf.Struct是为了存储 JSON 数据而创建的,它遵循 JSON 规范,不区分 Integer 和 Float:

https://www.rfc-editor.org/rfc/rfc7159#page-6

JSON 的实现提供了整数数据类型,例如JSONObject。然而,这样的实现通常依赖于将 numeric 转换为 Integer。请参阅JsonNumber.isIntegral

  • 问题是“com.google.protobuf.struct.Value”主动将整数*转换为浮点数。`print(google.protobuf.struct_pb2.Value(number_value=5))` 产生 `5.0` 而不是 `5`。 (6认同)