Binärdaten in JSON

Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
Gruß, Thomas

Hi,
Thomas Güttler wrote:
V4: ....
CBOR: https://en.wikipedia.org/wiki/CBOR
Quasi binäres JSON, mit Support für Binary-Strings und binärem Encoding. Gibt wohl inzwischen auch Libraries für viele Sprachen (genutzt hab ich Python 3 und Rust).
Michael.

Cool, von CBOR habe ich bisher auch noch nicht gehört.
Am 29.11.18 um 22:24 schrieb Michael Ziegler:
Hi,
Thomas Güttler wrote:
V4: ....
CBOR: https://en.wikipedia.org/wiki/CBOR
Quasi binäres JSON, mit Support für Binary-Strings und binärem Encoding. Gibt wohl inzwischen auch Libraries für viele Sprachen (genutzt hab ich Python 3 und Rust).
Michael.

On 29/11/2018 22:24, Michael Ziegler wrote:
Thomas Güttler wrote:
V4: ....
CBOR: https://en.wikipedia.org/wiki/CBOR
Quasi binäres JSON, mit Support für Binary-Strings und binärem Encoding. Gibt wohl inzwischen auch Libraries für viele Sprachen (genutzt hab ich Python 3 und Rust).
Relativ ähnlich ist BSON, https://en.wikipedia.org/wiki/BSON , das von MongoDB verwendet wird.
Viele Grüße Stefan

Am 29.11.18 um 16:36 schrieb Thomas Güttler:
Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
Wenn ees nur um den gelegentlichen Buinärstring in JSOn geht, würde ich diesen auch einfach mit base64 kodieren.
Ansonsten, wie wäre es mit msgpack?
https://en.wikipedia.org/wiki/MessagePack
Meiner Erfahrung nach zwar langsamer als Pickle aber schneller als JSON und sicherer als ersteres.
Chris

Ja, MessagePack sieht gut aus. Danke für den Hinweis. Ähnliche wie ProtocolBuffers. Aber bei ProtocolBuffers ist ein Schema zwingend nötig. Bei MessagePack anscheinend nicht. Das klingt MessagePack für mich erstmal flexibler.
Am 29.11.18 um 23:11 schrieb Christopher Arndt:
Am 29.11.18 um 16:36 schrieb Thomas Güttler:
Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
Wenn ees nur um den gelegentlichen Buinärstring in JSOn geht, würde ich diesen auch einfach mit base64 kodieren.
Ansonsten, wie wäre es mit msgpack?
https://en.wikipedia.org/wiki/MessagePack
Meiner Erfahrung nach zwar langsamer als Pickle aber schneller als JSON und sicherer als ersteres.
Chris _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

On 30/11/2018 09:55, Thomas Güttler wrote:
Ja, MessagePack sieht gut aus. Danke für den Hinweis. Ähnliche wie ProtocolBuffers. Aber bei ProtocolBuffers ist ein Schema zwingend nötig. Bei MessagePack anscheinend nicht. Das klingt MessagePack für mich erstmal flexibler.
msgpack wird u.a. auch bei pandas für eine Binärrepräsentation von Tabellen benutzt. Ist jedenfalls sehr flexibel und kann ungefähl das gleiche wie JSON (nur ein bisschen flexibler und halt binär)
Am 29.11.18 um 23:11 schrieb Christopher Arndt:
Am 29.11.18 um 16:36 schrieb Thomas Güttler:
Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
Wenn ees nur um den gelegentlichen Buinärstring in JSOn geht, würde ich diesen auch einfach mit base64 kodieren.
Ansonsten, wie wäre es mit msgpack?
https://en.wikipedia.org/wiki/MessagePack
Meiner Erfahrung nach zwar langsamer als Pickle aber schneller als JSON und sicherer als ersteres.
Chris _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

Oder doch gleich protobuf?
Gruß, Dinu
Am 29.11.2018 um 16:36 schrieb Thomas Güttler guettliml@thomas-guettler.de:
Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
Gruß, Thomas
-- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

Protobuf hat den aus-meiner-Sicht-Nachteil, dass man ein empfangenes Datenpäckchen nicht decoden kann ohne eine davon getrennte Schema-Datei zu haben, die dann auch noch compiled werden muss. Bei CBOR und JSON brauchst du nichts weiter als das Datenhäppchen, um es lesen zu können.
Michael.
Dinu Gherman wrote:
Oder doch gleich protobuf?
Gruß, Dinu
Am 29.11.2018 um 16:36 schrieb Thomas Güttler guettliml@thomas-guettler.de:
Hat jemand schon mal mit binären Daten in JSON gearbeitet?
Welche Lösungsvariante habt ihr gewählt?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
Gruß, Thomas
-- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

Am 30.11.18 um 00:37 schrieb Dinu Gherman:
Oder doch gleich protobuf?
Gruß, Dinu
Ja, protobuf wäre prinzipiell die richtige Wahl.
Aber es ist eben nicht so leichtgewichtig.
Wenn sich das Schema ändert, dann muss die Schema-Datei ausgetauscht werden...
Klingt nach "akadmisch richtiger Lösung", aber für die Praxis etwas zu sperrig.
Aber danke für den Hinweis.
Gruß, Thomas

Thomas Güttler schrieb am 30.11.18 um 10:14:
Am 30.11.18 um 00:37 schrieb Dinu Gherman:
Oder doch gleich protobuf?
Ja, protobuf wäre prinzipiell die richtige Wahl.
Aber es ist eben nicht so leichtgewichtig.
Wenn sich das Schema ändert, dann muss die Schema-Datei ausgetauscht werden...
Klingt nach "akadmisch richtiger Lösung", aber für die Praxis etwas zu sperrig.
Aber halt auch wesentlich sicherer als JSON. Wenn dir jemand Datenmüll schickt, dann willst du das ja vielleicht auch gleich wissen, bevor dein Code Himmel und Hölle in Bewegung setzt.
Und zur Schnittstellendokumentation ist ein Schema immer noch unschlagbar. Deine User werden es dir danken, auch für spezifische Fehlermeldungen bei Fehlbenutzung.
Übrigens war die Python protobuf-Implementierung das letzte Mal, als ich sie mir in diesem Jahr angeschaut habe, noch dynamisch, also ohne Vorab-Codegenerierung. Hat sich vermutlich nicht geändert.
Stefan

Frag mal Google, die nehmen das "in der Praxis" so ziemlich für alles...
D.
Am 30.11.2018 um 10:14 schrieb Thomas Güttler guettliml@thomas-guettler.de:
Klingt nach "akadmisch richtiger Lösung", aber für die Praxis etwas zu sperrig.
participants (8)
-
Christopher Arndt
-
Dinu Gherman
-
Michael Ziegler
-
Michael Ziegler
-
Stefan Behnel
-
Stefan Schwarzer
-
Thomas Güttler
-
Thomas Jollans