![]() |
JSON/Superobject mit Binären Daten
Ich bin dabei das JSON Format mittels superobject zu speichern und bin mir beim Escapen unsicher.
Ich nehme einen String sAESData der per AES Verschlüsselt wird. Diesen sAESData der Binäre Daten erhält wandle ich so in JSON um:
Delphi-Quellcode:
In den Tests klappt bisher alles. Auch wenn sAESData 0-Bytes enthält gibt es keine Exception und sOutput schaut OK aus.
var soString: ISuperObject;
sAESData: string; sOutput: string; ... soString := TSuperObject.Create(sAESData); sOutput := soString.AsJSon; soString := nil; Ich wollte trotzdem Fragen ob hier keine Falle lauert! Kann ich soString.AsJSon für beliebige binäre Daten verwenden? |
AW: JSON/Superobject mit Binären Daten
Um auf Nummer sicher zu gehen würde ich die binären Daten als Base64-String speichern.
|
AW: JSON/Superobject mit Binären Daten
Das macht die Datei eine Ecke größer. Würde es nur machen wenn es wirklich notwendig ist.
|
AW: JSON/Superobject mit Binären Daten
Zitat:
|
AW: JSON/Superobject mit Binären Daten
Welches spezifisches JSON Trennzeichen meinst du?
|
AW: JSON/Superobject mit Binären Daten
Geschweifte Klammern, Kommas, etc. Alles was bei JSON zur Syntax dazugehört
|
AW: JSON/Superobject mit Binären Daten
Hmm verstehe ist nicht.
Wenn ich den Text "abc{," habe wird daraus {"string": "abc{,"} Und ein JSON Validator hat kein Problem damit. |
AW: JSON/Superobject mit Binären Daten
Zitat:
Zitat:
|
AW: JSON/Superobject mit Binären Daten
"binäre" Daten in einem "String" ... wo es hier Probleme geben kann/wird, ist bei der Codierung, z.B. Umwandlung von Unicode (der Typ String seit D2009) z.B. nach ANSI, jenachdem wie das JSON am Ende gespeichert wird.
Außer SuperObjekt sorgt immer dafür, dass das JSON nur noch ASCII-Zeichen enthält. |
AW: JSON/Superobject mit Binären Daten
|
AW: JSON/Superobject mit Binären Daten
Zitat:
|
AW: JSON/Superobject mit Binären Daten
"wenig" und nicht jede Libt hält sich richtig an alles.
OK, SuperObjekt sollte sich an die Syntax halten, aber wie von SuperObjekt die Strings kodiert werden, weiß ich nicht ganz sicher. Würde aber alles "Nicht-ASCII" immer mit \u... kodiert, dann gibt es nie Probleme. |
AW: JSON/Superobject mit Binären Daten
Zitat:
|
AW: JSON/Superobject mit Binären Daten
Ich meinte doch das JSON-\u , so wie das #123 im Delphi ... das sollte der nicht nochmal maskieren (hoff ich doch, dass der das nicht macht).
|
AW: JSON/Superobject mit Binären Daten
Zitat:
InAußerdem ist die Rede von "Unicode Characters" je nach Sichtweise würde dies z.B. den Bereich von x0000-001F ausschließen, da es sich hierbei um Steuercodes handelt, was meiner Meinung nach wiederum für Basexx spricht. Gruß K-H |
AW: JSON/Superobject mit Binären Daten
Ich glaube fast wir reden aneinander vorbei.
Liegt aber wohl daran, dass ich so ein JSON-String niemals direkt erstelle sondern eben erstellen lasse. SuperObject oder das in Delphi eingebaute Gedöns kümmert sich dann darum, dass der von mir beliebig gewählte string JSON-konform in so einem JSON-Objekt abgelegt wird. Nur so als Beispiel:
Delphi-Quellcode:
als JSON-Objekt:
var
lFoo : TFoo; lFooStr : string; lExpected, lActual: string; begin lExpected := #0 + #1 + #2 + #3 + #4 + #5; lFoo := TFoo.Create; try lFoo.Bar := lExpected; lFooStr := lFoo.ToJson( ).AsJSon( ); finally lFoo.Free; end; lFoo := TFoo.FromJson( lFooStr ); try lActual := lFoo.Bar; finally lFoo.Free; end; Assert( lExpected.Equals( lActual ) ); end;
Code:
BTW: Der Delphi-Interne JSON-Serialisierer bekommt das zurückwandeln nicht auf den Schirm, da bleibt
{"bar":"\u0000\u0001\u0002\u0003\u0004\u0005"}
Delphi-Quellcode:
einfach leer
TFoo.Bar
|
AW: JSON/Superobject mit Binären Daten
Zitat:
Eine weitere Möglichkeit, wäre es, ein Array zu nutzen, dem sollte es ziemlich egal sein welche Daten es bekommt. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz