36 Stimmen

Gibt es eine Standardzuordnung zwischen JSON und Protokollpuffern?

Aus einem Kommentar auf der Ankündigung Blog Post :

Bezüglich JSON: JSON ist ähnlich strukturiert ähnlich wie Protokollpuffer, aber Protokollpuffer-Binärformat ist noch kleiner und schneller zu kodieren. JSON ist eine hervorragende Textkodierung für Protokollpuffer, obwohl es trivial ist ist es trivial, einen Encoder/Decoder zu schreiben zu schreiben, der beliebige Protokoll Nachrichten nach und von JSON konvertiert, indem man protobuf-Reflexion. Dies ist ein guter Weg, um mit AJAX-Anwendungen zu kommunizieren, denn der Benutzer muss einen vollständigen protobuf decoder herunterzuladen, wenn er Ihre Seite herunterzuladen, könnte zu viel sein.

Es mag trivial sein, etwas zu kochen a Mapping, aber gibt es ein einziges "offensichtliches" Mapping zwischen den beiden, auf das sich zwei getrennte Entwicklungsteams natürlich einigen würden? Wenn zwei Produkte PB-Daten unterstützen und interoperabel sind, weil sie dieselbe .proto-Spezifikation verwenden, frage ich mich, ob sie immer noch interoperabel wären, wenn sie unabhängig voneinander eine JSON-Reflexion derselben Spezifikation einführen würden. Es könnten einige willkürliche Entscheidungen getroffen werden, z.B. sollten Enum-Werte durch eine Zeichenkette repräsentiert werden (um für den Menschen lesbar zu sein, wie typisches JSON) oder durch ihren Integer-Wert?

Also gibt es eine etablierte Zuordnung, und alle Open-Source-Implementierungen für die Generierung von JSON-Encoder/Decoder aus .proto Spezifikationen?

0voto

Pramit Punkte 1273

Zunächst einmal denke ich, dass man sehr sorgfältig überlegen sollte, ob man einen Datensatz in Protobuffs umwandeln will. Hier meine Gründe für die Umwandlung eines Datensatzes in Protobuffs

  1. Typensicherheit: Garantie für das Format der zu berücksichtigenden Daten.
  2. unkomprimierter Speicherplatzbedarf der Daten. Der Grund, warum ich erwähne un-komprimiert ist, weil nach der Kompression gibt es nicht viel von einem Unterschied in der Größe der JSON komprimiert und proto komprimiert, aber die Kompression hat eine Kosten mit ihm verbunden. Auch die Geschwindigkeit der Serialisierung/Deserialisierung ist fast gleich, Jackson JSON ist sogar schneller als Protobuffs. Unter dem folgenden Link finden Sie weitere Informationen http://technicalrex.com/2014/06/23/performance-playground-jackson-vs-protocol-buffers/
  3. Die Protobuffs müssen häufig über das Netz übertragen werden.

Sobald Sie Ihren Datensatz in das Jackson JSON-Format konvertiert haben, so wie es in der ProtoBuff-Definition festgelegt ist, kann er sehr einfach mit der Funktion Protostuff:JsonIoUtil:mergeFrom direkt in das ProtoBuff-Format umgewandelt werden. Signatur der Funktion :

public static <T> void mergeFrom(JsonParser parser, T message, Schema<T> schema,  boolean numeric) 

Hinweis auf Protostoffe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X