解决 Protobuf 反序列化时,字段从下划线格式变为驼峰格式

在PHP中使用Protobuf反序列化为JSON时,字段名从下划线格式自动转为驼峰格式的问题,可通过以下方案解决:

修改Protobuf定义(推荐)

在.proto文件中使用json_name选项显式指定JSON字段名,强制保持原始下划线格式:

syntax = "proto3";
message User {
  string user_name = 1 [(json_name) = "user_name"]; // 保持下划线
  int32 user_age = 2 [(json_name) = "user_age"];
}

效果

生成的JSON将保留 user_name 而非转为userName。

关键说明

  • 原因:Protobuf的PHP库默认将下划线字段名转为驼峰格式,符合部分语言的命名规范。

  • 兼容性:json_name选项需Protobuf 3+支持。