Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Protobuf JSONFormatter.printer将Json中的长字符串转换为字符串_Java_Json_Protocol Buffers - Fatal编程技术网

Java Protobuf JSONFormatter.printer将Json中的长字符串转换为字符串

Java Protobuf JSONFormatter.printer将Json中的长字符串转换为字符串,java,json,protocol-buffers,Java,Json,Protocol Buffers,目前,我遇到了JSONFormatter.printer在JSON中将longfixed64值打印为字符串的行为。 是否有任何方法/选项将jsonformatter.printer设置为不在Json中执行此转换Longfix 64->String? Json由Java应用程序使用,在Json中将fixed64表示为整数对Java来说应该不是问题 代码如下: 在data.proto中 syntax = "proto2"; message data{ required fixed64 user_

目前,我遇到了JSONFormatter.printer在JSON中将longfixed64值打印为字符串的行为。 是否有任何方法/选项将jsonformatter.printer设置为不在Json中执行此转换Longfix 64->String? Json由Java应用程序使用,在Json中将fixed64表示为整数对Java来说应该不是问题

代码如下: 在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使用protoc 2.6.1生成

...
private long userId_;
...
private int memberId_;
...
预期结果: {用户id:6546585813946021349,成员id:7521}

实际结果: {用户id:6546585813946021349,成员id:7521}

用户id是json中的字符串,但我希望它是整数

谢谢
David

根据源代码,这似乎是出于设计。UINT64和FIXED64类型始终以双引号打印出来,没有问题:

在同一个文件中,上面几行,您可以看到,如果INT32类型是映射中的键,而您的proto显然没有,那么它们只能被双引号引用


因此,我想询问protobuf邮件列表的更多信息,或者将其报告为错误/功能请求。

您在这里指的是什么编程语言?你忘了给它贴标签了。你能展示一个完整的代码和数据样本,可以用来重现这个问题吗?谢谢。语言是Java。好的,谢谢。现在,请您编辑您的问题以正确标记它,并提供我在上一次评论中要求的内容。这样,合适的人就更容易看到你的问题,也更容易帮助你。谢谢。添加了示例。非常感谢。
    case INT64:
    case SINT64:
    case SFIXED64:
      generator.print("\"" + ((Long) value).toString() + "\"");