В настоящее время я сталкиваюсь с поведением JsonFormater.printer, печатающего длинное (fixed64) значение как String в JSON. Есть ли способ / опция, чтобы JsonFormater.printer не выполнял это преобразование (Long (fixed64) -> String в Json)? Json используется приложением Java, поэтому представление fixed64 как целого числа в JSON не должно быть проблемой для 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 (сгенерирован с помощью протокола 2.6.1)
...
private long userId_;
...
private int memberId_;
...
ожидаемый результат:
{"user_id":6546585813946021349,member_id":7521}
фактический результат:
{"user_id":"6546585813946021349",member_id":7521}
User_id - это String в json, но я хочу, чтобы он был целым числом
Спасибо Дэйвид
Язык - Java.
Хорошо спасибо. Теперь не могли бы вы отредактировать свой вопрос, чтобы правильно пометить его, а также предоставить MCVE, который я просил в моем последнем комментарии. Тогда нужным людям будет намного легче увидеть ваш вопрос и легко вам помочь. Спасибо.
Пример добавлен. Спасибо.
Судя по исходному коду, похоже, это сделано намеренно. Типы UINT64
и FIXED64
всегда печатаются в двойных кавычках, без вопросов:
case INT64:
case SINT64:
case SFIXED64:
generator.print("\"" + ((Long) value).toString() + "\"");
В том же файле несколькими строками выше вы можете видеть, что типы INT32
заключаются в двойные кавычки только в том случае, если они являются ключами на карте (чего, очевидно, нет у вашего прототипа).
Итак, я бы попросил дополнительную информацию о списке рассылки protobuf или, возможно, сообщить об этом как об ошибке / запросе функции.
какой язык программирования вы здесь имеете в виду? Вы забыли пометить это. И не могли бы вы показать полный код и образец данных, которые можно использовать для воспроизведения проблемы? Спасибо.