Dodawanie do Ophir s odpowiedzi JsonFormat jest dostępny nawet przed protobuf 3.0. Jednak sposób na to różni się nieco.
W Protobuf 3.0+, klasa JsonFormat jest pojedyncza, a zatem zrobić coś jak poniżej
String jsonString = "";
JsonFormat.parser().ignoringUnknownFields().merge(json,yourObjectBuilder);
W Protobuf 2.5+, poniżej powinny działać
String jsonString = "";
JsonFormat jsonFormat = new JsonFormat();
jsonString = jsonFormat.printToString(yourProtobufMessage);
Oto link do tutorial pisałem, że zastosowania klasa JsonFormat w TypeAdapter, która może zostać zarejestrowana w obiekcie GsonBuilder. Następnie można użyć metod Gson's toJson i fromJson do konwersji danych proto na język Java iz powrotem.
Odpowiadając na jean. Jeśli mamy dane protobuf w pliku i chcemy je przetworzyć w obiekt komunikatu protobuf, użyj klasy merge TextFormat. Patrz poniższy fragment:
// Let your proto text data be in a file MessageDataAsProto.prototxt
// Read it into string
String protoDataAsString = FileUtils.readFileToString(new File("MessageDataAsProto.prototxt"));
// Create an object of the message builder
MyMessage.Builder myMsgBuilder = MyMessage.newBuilder();
// Use text format to parse the data into the message builder
TextFormat.merge(protoDataAsString, ExtensionRegistry.getEmptyRegistry(), myMsgBuilder);
// Build the message and return
return myMsgBuilder.build();
Co dokładnie masz na myśli przez „bo może pewnego dnia stać się nie wstecznie kompatybilne z nowszymi wersjami "? A co sprawia, że JSON będzie bardziej prawdopodobne, że będzie kompatybilny wstecz? Czy mówisz o nowszych wersjach twojego schematu proto lub ogólnie o nowszych wersjach buforów protokołów? Z doświadczenia wiem, że przechowywanie buforów protokołów jest absolutnie w porządku ... –
Należy zauważyć, że bufory protokołów 3 (obecnie w wersji beta) będą bezpośrednio wspierać JSON. –
Zobacz także https://stackoverflow.com/questions/2544580/is-there-a-standard-mapping-between-json-and-protocol-buffers – Raedwald