Format Atlas

Vergleichen

Protocol Buffers oder JSON

Protocol Buffers definiert typisierte Nachrichten aus `.proto`-Schemata und bietet ein feldnummernbasiertes binäres Wire-Format sowie ein separates ProtoJSON-Mapping. JSON ist ein allgemeines Textformat nach RFC 8259 ohne vorausgesetztes Schema.

Welches Format sollten Sie wählen?

Wählen Sie Protobuf für RPC- oder Dienstnachrichten, wenn typisierte Verträge und Binärkompatibilität verwaltet werden. JSON eignet sich für allgemeine Textstrukturen und breite JSON-Werkzeuge.

Geeignet für Protocol-Buffers-Schema

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

  • Sprachspezifischen Code mit protoc erzeugen
  • Nachrichten für RPC und die Kommunikation zwischen Diensten definieren

Geeignet für JSON

Web-APIs, Konfigurationsdateien und Datenaustausch

  • Übertragen strukturierter Daten

Grundlegende Informationen

MerkmalProtocol-Buffers-SchemaJSON
Dateiendung.proto.json
MIME-Typtext/plainapplication/json
Häufige VerwendungStruktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilenWeb-APIs, Konfigurationsdateien und Datenaustausch
ÖffnenÖffnen Sie die Datei in einem Texteditor oder einer Protocol-Buffers-fähigen IDE. Prüfen Sie Syntax und Imports, indem Sie sie mit der im Projekt verwendeten protoc-Version und Konfiguration kompilieren.Öffnen Sie die Datei in einem Texteditor, einer IDE oder einem JSON-fähigen Viewer.
Exportieren oder konvertierenOrdnen Sie beim Wechsel zu einem anderen Schemaformat Typen, Feldnummern, Standardwerte, Enum-Werte und Kompatibilitätsregeln zu. Erzeugen Sie anschließend den Code und testen Sie reale Daten. Eine Umbenennung in .json oder eine Binärdateiendung konvertiert die Datei nicht.Anwendungen oder Konvertierungswerkzeuge können sie in Formate wie CSV umwandeln.

Nach Einsatzzweck wählen

Sprachspezifischen Code mit protoc erzeugen

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

Protocol-Buffers-Schema

Nachrichten für RPC und die Kommunikation zwischen Diensten definieren

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

Protocol-Buffers-Schema

Übertragen strukturierter Daten

Web-APIs, Konfigurationsdateien und Datenaustausch

JSON

Wichtiger Punkt 1

Protobuf-Binärdaten hängen von `.proto`-Definition und Feldnummern ab. JSON stellt Textobjekte und Arrays ohne Schema dar; ProtoJSON bildet Protobuf-Typen nach eigenen Regeln auf JSON-Werte ab.

Unterschiede im Detail

Wichtiger Punkt 2

ProtoJSON bildet bytes auf Base64-Zeichenketten, int64 auf Zeichenketten, Enums auf Namen und Feldnamen auf JSON-Schlüssel ab. Das ist weder das Binär-Wire-Format noch ein beliebiges JSON Schema.

Unterschiede im Detail

Unterschiede im Detail

Verwenden Sie Protobuf für typisierte Dienstverträge und kompakten Binäraustausch. Verwenden Sie JSON für allgemeine Textschnittstellen. Folgen Sie bei Protobuf-JSON-Daten ProtoJSON und setzen Sie nicht beliebige JSON-Dokumente gleich. Prüfen Sie Presence, null, Zahlenbereiche, unbekannte Felder und Schemaentwicklung.

  • Zum Interpretieren von Feldnummern und Typen in Protobuf-Wire-Nachrichten ist ein passendes Schema nötig. Allgemeine JSON-Syntax verlangt keines.
  • ProtoJSON hat eigene Abbildungen und Kompatibilitätsregeln, ist weniger effizient als das Binärformat und bewahrt unbekannte Felder nicht auf dieselbe Weise.
  • Konvertierung kann Presence, Ganzzahlgenauigkeit, Enum-Namen, Map-Schlüssel, oneof, null und unbekannte Felder beeinflussen. Prüfen Sie reale Laufzeitbibliotheken sowie alte und neue Schemaversionen.

Häufige Fragen

Ist ProtoJSON mit jedem JSON-Dokument austauschbar?

Nein. ProtoJSON stellt nur mit Protobuf-Schema ausdrückbare Strukturen nach eigenen Regeln dar und kann weder jedes JSON Schema noch jedes Wire-Verhalten abbilden.

Mehr erfahren

Quellen und Spezifikationen