2016-07-15 94 views
13

Sono nuovo nell'usare protobuf e mi chiedevo se esiste un modo semplice per convertire un flusso/stringa json in un flusso/stringa protobuf in Java?Come convertire da Json a Protobuf?

Per esempio,

protoString = convertToProto(jsonString) 

Ho una stringa JSON che voglio analizzare in un messaggio protobuf. Quindi, voglio prima convertire la stringa json in protobuf, e quindi chiamare Message.parseFrom() su di esso.

Grazie in anticipo per l'aiuto!

+0

Si potrebbe invece dare un'occhiata a [FlatBuffers] (https://google.github.io/flatbuffers/). –

+1

"è un modo semplice per convertire un flusso/stringa json in un flusso/stringa protobuf?" Probabilmente no. Funzionano diversamente; i campi protobuf non sono effettivamente denominati nella rappresentazione serializzata, ma sono in sequenza. JSON è quasi l'opposto; i campi sono nominati, ma la sequenza generalmente non ha importanza. Quello che * puoi * fare è prendere le tue classi protobuf generate e usare i mixini Jackson per annotarle e analizzarle. –

risposta

8

Con proto3 è possibile utilizzare JsonFormat. Analizza direttamente dalla rappresentazione JSON, quindi non è necessario chiamare separatamente MyMessage.parseFrom(...). Qualcosa del genere dovrebbe funzionare:

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

Quando un valore non è valido (ad esempio, proto è booleano, ma il valore di json è intero), c'è un modo per configurare il parser per ignorare quel campo o impostare quel campo su null, invece di lanciare 'com.google.protobuf.InvalidProtocolBufferException' ? – the1plummie