zu Ophir s Antwort Hinzufügen ist JsonFormat verfügbar, noch bevor protobuf 3.0. Die Vorgehensweise unterscheidet sich jedoch ein wenig.
In Protobuf 3.0+ ist die JsonFormat Klasse ein Singleton und damit so etwas wie die unten
String jsonString = "";
JsonFormat.parser().ignoringUnknownFields().merge(json,yourObjectBuilder);
In Protobuf 2.5+, sollte die unten arbeiten
String jsonString = "";
JsonFormat jsonFormat = new JsonFormat();
jsonString = jsonFormat.printToString(yourProtobufMessage);
Hier ein Link zu einer tutorial ist ich schrieb, dass Verwendungen die JsonFormat-Klasse in einem TypeAdapter, die für ein GsonBuilder-Objekt registriert werden kann. Sie können dann die toSon- und fromJson-Methoden von Gson verwenden, um die Proto-Daten in Java und zurück zu konvertieren.
Antwort auf jean. Wenn wir die protobuf-Daten in einer Datei haben und sie in ein protobuf-Nachrichtenobjekt analysieren möchten, verwenden Sie die Merge-Methode TextFormat class. Siehe unten stehende Snippet:
// 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();
Was genau bedeuten, meinen Sie „, weil es eines Tages auch mit neueren Versionen nicht rückwärtskompatibel geworden "? Und was lässt Sie glauben, dass JSON eher rückwärtskompatibel bleibt? Sprechen Sie über neuere Versionen Ihres Proto-Schemas oder neuere Versionen von Protokollpuffern im Allgemeinen? Meine Erfahrung ist, dass das Speichern von Protokollpuffern absolut in Ordnung ist. –
Beachten Sie, dass Protokollpuffer 3 (derzeit in der Betaversion) JSON direkt unterstützen. –
Siehe auch https://stackoverflow.com/questions/2544580/is-there-a-standard-mapping-between-json-and-protocol-buffers – Raedwald