2016-07-15 4 views
13

Я новичок в использовании protobuf, и мне было интересно, есть ли простой способ конвертировать поток json/string в поток protobuf/string в Java?Как конфертировать из Json в Protobuf?

Например,

protoString = convertToProto(jsonString) 

У меня есть JSON строку, которую я хочу, чтобы разобрать в сообщение Protobuf. Итак, я хочу сначала преобразовать строку json в protobuf, а затем называть Message.parseFrom().

Заранее благодарим за помощь!

+0

Возможно, вы захотите взглянуть на [FlatBuffers] (https://google.github.io/flatbuffers/). –

+1

"- это простой способ конвертировать поток/строку json в поток protobuf/string?" Наверное, нет. Они работают по-разному; Поля protobuf на самом деле не называются в сериализованном представлении, но они находятся в последовательности. JSON почти наоборот; поля называются, но последовательность обычно не имеет значения. То, что вы * можете сделать, - это взять ваши сгенерированные классы protobuf и использовать миксовки Jackson, чтобы аннотировать их и проанализировать в них. –

ответ

8

С proto3 вы можете сделать это, используя JsonFormat. Он анализирует непосредственно из представления JSON, поэтому нет необходимости отдельно звонить MyMessage.parseFrom(...). Что-то вроде этого должно работать:

JsonFormat.parser().merge(json_string, builder); 
+1

Когда значение недействительно (скажем, proto имеет значение boolean, но значение json равно целочисленному), есть ли способ настроить парсер игнорировать это поле или установить это поле в значение null, вместо того, чтобы бросать 'com.google.protobuf.InvalidProtocolBufferException' ? – the1plummie

Смежные вопросы