当前,我遇到JsonFormater.printer的行为,将long(fixed64)值打印为JSON中的String。 有没有什么方法/选项可以设置JsonFormater.printer不执行此转换(Json中的Long(fixed64)-> String)? Json由Java应用程序使用,在Java中将fixed64表示为JSON中的整数应该不是问题。
这是代码: 在data.proto
syntax = "proto2";
message data{
required fixed64 user_id = 1;
required int32 member_id = 2
}
这是Java代码,文件格式为* .pb.gz
import com.google.protobuf.util.JsonFormat;
.......
//print data in JSON format
final InputStream input = new GZIPInputStream(new FileInputStream(pathToFile));
Message m;
m = defaultMsg.getParserForType().parseDelimitedFrom(input));
String jsonString = JsonFormat.printer().preservingProtoFieldNames().omittingInsignificantWhitespace().print(m);
生成的Java类:Data.java(由协议2.6.1生成)
...
private long userId_;
...
private int memberId_;
...
预期结果:
{"user_id":6546585813946021349,member_id":7521}
实际结果:
{"user_id":"6546585813946021349",member_id":7521}
user_id是json中的String,但我希望将其作为整数
谢谢 大卫
答案 0 :(得分:0)
根据源代码,这似乎是设计使然。 UINT64
和FIXED64
类型始终用双引号打印出来,没有问题:
case INT64:
case SINT64:
case SFIXED64:
generator.print("\"" + ((Long) value).toString() + "\"");
在同一文件中的上面几行中,您可以看到INT32
类型只有在映射中是键时才被双引号(您的原型显然没有)。
因此,我希望在protobuf邮件列表中寻求更多信息,或者将其报告为错误/功能请求。