AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)
Thema durchsuchen
Ansicht
Themen-Optionen

TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

Ein Thema von bernau · begonnen am 31. Jul 2024 · letzter Beitrag vom 31. Jul 2024
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#1

TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

  Alt 31. Jul 2024, 09:16
Folgender (Test-)Quellcode:

Delphi-Quellcode:
procedure TFormBeautifyTest.BitBtn1Click(Sender: TObject);
var
  lJSONValue: TJSONValue;
  lJsonString: String;
  lJsonPair: TJsonPair;
begin
  lJsonString := '{"object": "value","test/html": "http://url"}';
  lJSONValue := TJSONObject.ParseJSONValue(lJsonString, true, true);
  try
    MemoDest.Lines.Text := lJSONValue.Format(2);
    //MemoDest.Lines.Text := lJSONValue.tostring; // <- hier gibt es auch den Fehler. Nur unformatiert.
    
    // Mal den Inhalt der JSON-Objekte testen. Hier ist der Wert korrekt.
    lJsonPair := TJSONObject(lJSONValue).Pairs[1];
    MemoDest.Lines.add('');
    MemoDest.Lines.add(lJsonPair.JsonString.Value);
    MemoDest.Lines.add(lJsonPair.JsonValue.Value);
  finally
    lJSONValue.Free;
  end;
end;
Eigentlich erwarte ich folgenden output:

Code:
{
  "object": "value",
  "test/html": "http://url"
}

test/html
http://url
Tatsächlich werden die Slashes mit einem Backslash escaped. Ist aber in einem JSON-Text nicht vorgesehen/notwendig.

Code:
{
  "object": "value",
  "test\/html": "http:\/\/url"
}

test/html
http://url
Bin mir nicht sicher, aber mich meine es war in Delphi 11 nicht so.

Oder habe ich irgendetwas übersehen? Gibt es ein Property, welches die Escape-Zeichen unterdrückt?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau (31. Jul 2024 um 09:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

  Alt 31. Jul 2024, 10:01
Laut Definition ist es aber vorgesehn und vollkommen korrekt, wenn es so gemacht wird,
auch wenn Viele (inkl. mir) es nicht für notwendig erachten mögen.

Inzwischen wurde JSON auch in einige Standards aufgenommen.
RFC 8259 und ECMA-404

Wenn man sie streng ganz genau nimmt, dann steht dort, dass dieses Zeichen escaped werden "muß",
aber es ist auch erlaubt, dass es beim Dekodieren auch unescaped sein darf.



Hast du mal in die Optionen geschaut, ob es dagegen was gibt?
[add] TJSONOutputOptions sagt nö
$2B or not $2B

Geändert von himitsu (31. Jul 2024 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#3

AW: TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

  Alt 31. Jul 2024, 10:15
Laut Definition ist es aber vorgesehn und vollkommen korrekt, wenn es so gemacht wird,
auch wenn Viele (inkl. mir) es nicht für notwendig erachten mögen.
Oha. Stimmt. Du hast recht.

https://www.json.org/json-de.html

Lesbarer ist es aber dennoch ohne Escapezeichen. Vielleicht gibt es irgendwann mal ein Property in TJSONValue, bei dem man Escape beim Forewardslash abschalten kann.

Edit:

Witzigerweise werden im rfc8259 die examples ohne den Escapezeichen angegeben :

https://datatracker.ietf.org/doc/htm...259#section-13

EditEdit:

Allerdings steht im RFC auch folgendes

Zitat:
All Unicode characters may be placed within the
quotation marks, except for the characters that MUST be escaped:
quotation mark, reverse solidus, and the control characters (U+0000
through U+001F).
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau (31. Jul 2024 um 10:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#4

AW: TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

  Alt 31. Jul 2024, 10:54
Ich habe da mal ein neues Feature angefragt.

https://embt.atlassian.net/servicede...tal/1/RSS-1475

Schade, dass man nicht mehr abstimmen kann
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TJSONValue.Format fügt Escapezeichen ein. (Neu in Delphi 12?)

  Alt 31. Jul 2024, 11:29
Unübersichtlich, die Suche ist ein Grauß und vieles fehlt.

Inzwischen wurde JSON auch in einige Standards aufgenommen.
RFC 8259 und ECMA-404

Wenn man sie streng ganz genau nimmt, dann steht dort, dass dieses Zeichen escaped werden "muß",
aber es ist auch erlaubt, dass es beim Dekodieren auch unescaped sein darf.
Jupp, auch bei ECMA ist es in den Beispielen und auch im Abschnitt "9 Strings" so angegeben.
https://ecma-international.org/publi...ards/ecma-404/
$2B or not $2B

Geändert von himitsu (31. Jul 2024 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz