Re: [Python-de] Binärdaten in JSON
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?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
base64? Gruß, Thomas -- I have seen things you lusers would not believe. I've seen Sun monitors on fire off the side of the multimedia lab. I've seen NTU lights glitter in the dark near the Mail Gate. All these things will be lost in time, like the root partition last week.
On Thu, 29 Nov 2018 18:19:45 +0100 Thomas Orgelmacher <trash@odbs.org> wrote:
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?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
base64?
+1 Hihi, ich hab mal in einer Firma gearbeitet, da wurde zwischen Ruby und Python kommuniziert indem Binär in Base64 in Yaml in ASN.1 in ZeroMQ gemacht wurde;-) Historisch gewuchert halt. - Arnold
Am 29.11.18 um 18:19 schrieb Thomas Orgelmacher:
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?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
base64?
Autofahrer an Polizist: Kann ich hier wenden? Polizist an Autofahrer: Sie dürfen, wenn Sie es können. Also wie ist das mit base64 gemeint? Wie ist das JSON ähnliches Datenformat, welches auch binäre Daten übertragen kann? Ich suche eine Lösung. Ein Datenformat. Ich suche nicht ein gebasteltes Work-around. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
Hallo Thomas, On 30/11/2018 09:48, Thomas Güttler wrote:
Am 29.11.18 um 18:19 schrieb Thomas Orgelmacher:
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?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
base64?
Autofahrer an Polizist: Kann ich hier wenden? Polizist an Autofahrer: Sie dürfen, wenn Sie es können.
Also wie ist das mit base64 gemeint? Wie ist das JSON ähnliches Datenformat, welches auch binäre Daten übertragen kann?
Ich suche eine Lösung. Ein Datenformat. Ich suche nicht ein gebasteltes Work-around.
Deine Frage war "Hat jemand schon mal mit binären Daten in JSON gearbeitet?" Wenn man sich die von dir genannten Links nicht oder nur flüchtig angeschaut hat, kann man deine Frage auch durchaus so interpretieren, dass du binäre Daten innerhalb von JSON übertragen willst. Zu "Ich suche eine Lösung": Wir wissen ja gar nicht, was dein konkretes Problem ist, außer "mit binären Daten in JSON arbeiten." Viele Grüße Stefan
On 30.11.2018 11:27, Stefan Schwarzer wrote:
Hallo Thomas,
On 30/11/2018 09:48, Thomas Güttler wrote:
Am 29.11.18 um 18:19 schrieb Thomas Orgelmacher:
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: ....
Am 29.11.18 um 16:36 schrieb Thomas Güttler: base64? Also wie ist das mit base64 gemeint? Wie ist das JSON ähnliches Datenformat, welches auch binäre Daten übertragen kann?
Ich suche eine Lösung. Ein Datenformat. Ich suche nicht ein gebasteltes Work-around. Zu "Ich suche eine Lösung": Wir wissen ja gar nicht, was dein konkretes Problem ist, außer "mit binären Daten in JSON arbeiten."
Exakt. Base64 ist kein Workaround. Damit kannst Du ganz ohne externe Libraries binäre Daten in JSON-Feldern serialisieren. Beispiel: person = { 'name': 'Luke Skywalker', } pic_content = pathlib.Path(pic_path).read_bytes() person['picture'] = base64.encodebytes(pic_content).decode('ascii') Das dict kann nun problemlos mit json.dumps() serialisiert werden. Das 'picture'-Attribut ist reines ASCII. Es muss kein neues Binärformat eingeführt werden, beim Tracen der Messages zwischen Client und Server ist alles weiterhin JSON und damit sehr gut lesbar etc. etc. Viele Grüße, Hardy
Am 30.11.18 um 11:27 schrieb Stefan Schwarzer:
Hallo Thomas,
On 30/11/2018 09:48, Thomas Güttler wrote:
Am 29.11.18 um 18:19 schrieb Thomas Orgelmacher:
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?
V1: http://bsonspec.org/ V2: http://bjson.org/ V3: https://github.com/FasterXML/smile-format-specification V4: ....
base64?
Autofahrer an Polizist: Kann ich hier wenden? Polizist an Autofahrer: Sie dürfen, wenn Sie es können.
Also wie ist das mit base64 gemeint? Wie ist das JSON ähnliches Datenformat, welches auch binäre Daten übertragen kann?
Ich suche eine Lösung. Ein Datenformat. Ich suche nicht ein gebasteltes Work-around.
Deine Frage war "Hat jemand schon mal mit binären Daten in JSON gearbeitet?"
Wenn man sich die von dir genannten Links nicht oder nur flüchtig angeschaut hat, kann man deine Frage auch durchaus so interpretieren, dass du binäre Daten innerhalb von JSON übertragen willst.
Zu "Ich suche eine Lösung": Wir wissen ja gar nicht, was dein konkretes Problem ist, außer "mit binären Daten in JSON arbeiten."
Ja, sorry. Ich bin hier etwas genervt, weil die Grundlagen nicht klar sind. JSON kann jeder. Aber binäre Daten darin zu übertragen geht leider nicht. Mit base64 benötigt es einer expliziten Absprache und darum ist es aus meiner Sicht ein work-around. Vermutlich wird es das werden. Es kommt darauf an, was der Empfänger der Daten kann. Ich vermute MessagePack werden die vermutlich nicht können. Aber vielleicht liege ich da auch falsch. Ich finde es immer super, wenn es einen klaren Weg gibt. Also eine Art world-wide-agreement. Wie bei zB JSON. Aber bis jetzt gibt es das hier noch nicht. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
On 30/11/2018 15:01, Thomas Güttler wrote:
Ja, sorry. Ich bin hier etwas genervt, weil die Grundlagen nicht klar sind. JSON kann jeder. Aber binäre Daten darin zu übertragen geht leider nicht. Mit base64 benötigt es einer expliziten Absprache und darum ist es aus meiner Sicht ein work-around. Vermutlich wird es das werden. Es kommt darauf an, was der Empfänger der Daten kann. Ich vermute MessagePack werden die vermutlich nicht können. Aber vielleicht liege ich da auch falsch.
Base64 kann auch jeder, und die Absprache brauchst Du eh: ein JSON-Datensatz ist schön und gut, man muss aber immer wissen, wie ein bestimmtes JSON zu interpretieren ist. Was bedeuten die Felder? Ist ein String eine URL, eine interne ID, ein Titel, eine Nachricht, oder was? Je nachdem wie der Datensatz aufgebaut ist, kannst Du solche Sachen als Mensch wahrscheinlich erraten, aber als Mensch kannst Du auch Base64 erkennen. Je nachdem was Du überträgst, könntest Du auch Data-URIs in dem JSON einbetten (… die dann wiederum Base64 für Binärdaten benutzen). Da ist dann auch ein MIME-Typ drin. Gruß Thomas
Ich finde es immer super, wenn es einen klaren Weg gibt. Also eine Art world-wide-agreement. Wie bei zB JSON. Aber bis jetzt gibt es das hier noch nicht.
Gruß, Thomas
Am 03.12.18 um 10:21 schrieb Thomas Jollans:
On 30/11/2018 15:01, Thomas Güttler wrote:
Ja, sorry. Ich bin hier etwas genervt, weil die Grundlagen nicht klar sind. JSON kann jeder. Aber binäre Daten darin zu übertragen geht leider nicht. Mit base64 benötigt es einer expliziten Absprache und darum ist es aus meiner Sicht ein work-around. Vermutlich wird es das werden. Es kommt darauf an, was der Empfänger der Daten kann. Ich vermute MessagePack werden die vermutlich nicht können. Aber vielleicht liege ich da auch falsch.
Base64 kann auch jeder, und die Absprache brauchst Du eh: ein JSON-Datensatz ist schön und gut, man muss aber immer wissen, wie ein bestimmtes JSON zu interpretieren ist.
In diesem konkreten Fall reiche ich die Daten einfach durch. Ich erhalte per SAP-RFC eine Datenstruktur und geben diese als JSON aus. SAP-RFC kann mit binären Daten umgehen. Schön wäre eine generische Lösung. Die scheitert gerade daran, dass man dann wieder programmieren muss: "if blablabla, dann die Daten erst noch per base64 verwurschteln ..." Wäre wirklich super, wenn ich meinem Kunden sagen könnte: Wir nehmen JSON++ (gibt es nicht, der Name ist erfunden) und fertig.
Je nachdem was Du überträgst, könntest Du auch Data-URIs in dem JSON einbetten (… die dann wiederum Base64 für Binärdaten benutzen). Da ist dann auch ein MIME-Typ drin.
Es gibt tausend work-Arounds (wie zb base64 selber erstellen) und hundert alternative JSON-Formate. In zehn Jahren werden wir wissen welches Format das Rennen gemacht hat. Aktuell ist das für mich noch nicht abzusehen. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
Thomas Güttler schrieb am 04.12.18 um 10:25:
Es gibt tausend work-Arounds (wie zb base64 selber erstellen) und hundert alternative JSON-Formate.
In zehn Jahren werden wir wissen welches Format das Rennen gemacht hat.
Aktuell ist das für mich noch nicht abzusehen.
So ist das halt, wenn jemand ein neues Datenformat erfindet, das "total viel einfacher" als alles andere ist, und sich dann herausstellt, dass es nur deshalb "total viel einfacher" ist, weil alles, was die anderen Formate halt mit der Zeit an notwendigen Features entwickelt haben, auch deren Komplexität erhöht hat. Also wird noch schnell alles an Features drangeklatsch, was die anderen Formate schon haben, und – hoppsa – schon brauchen wir ein neues Datenformat, das endlich alles "total viel einfacher" macht. https://xkcd.com/927/ Stefan
participants (7)
-
Arnold Krille
-
Hardy Erlinger
-
Stefan Behnel
-
Stefan Schwarzer
-
Thomas Güttler
-
Thomas Jollans
-
Thomas Orgelmacher