2016-07-15 46 views
13

我是新來使用protobuf,並想知道是否有一種簡單的方法來將json流/字符串轉換爲Java中的protobuf流/字符串?怎麼把Json轉換成Protobuf?

例如,

protoString = convertToProto(jsonString) 

我有,我想分析成的protobuf消息的JSON字符串。所以,我想先將json字符串轉換爲protobuf,然後在其上調用Message.parseFrom()

在此先感謝您的幫助!

+0

你可能想看看[FlatBuffers](https://google.github.io/flatbuffers/)來代替。 –

+1

「是一種將json流/字符串轉換爲protobuf流/字符串的簡單方法?」可能不是。他們的工作不同protobuf字段實際上並未在序列化表示中命名,但它們是按順序排列的。 JSON幾乎相反;字段被命名,但序列通常無關緊要。你*可以做的就是把你生成的protobuf類並使用Jackson mixins註釋它們並解析它們。 –

回答

8

使用proto3,你可以使用JsonFormat來做到這一點。它直接從JSON表示中解析出來,因此不需要單獨調用MyMessage.parseFrom(...)。像這樣的東西應該工作:

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

當一個值無效(說proto是布爾值,但json值是整數),有沒有辦法配置解析器忽略該字段或將該字段設置爲null,而不是拋出'com.google.protobuf.InvalidProtocolBufferException' ? – the1plummie