AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Ist "true" valides JSON?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist "true" valides JSON?

Ein Thema von Codehunter · begonnen am 22. Jan 2021 · letzter Beitrag vom 22. Jan 2021
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#1

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 12:27
Wenn man auf https://jsonformatter.curiousconcept.com/# vertrauen möchte, wäre es nach RFC8259 und RFC7159 in beiden Schreibweisen valide, nach RFC4627 und ECMA404 keine von beiden. Immer wieder schön wenn die Standards so eindeutig sind

Bei TJSONObject ist mir ehrlich gesagt völlig egal, ob es als String oder Bool interpretiert wird. Ich caste das einfach nach Bedarf von TJSONValue nach TJSONString oder TJSONBool.

Wenn man annimmt, dass JSON aus Javascript heraus entstanden ist und das dortige Objektmodell widerspiegelt, dann wäre es einleuchtend dass Bools ohne Anführungszeichen notiert werden. Aber die Ausgangsfrage war ja, ob ein simples "true" als gesamter JSON-Body valide ist oder nicht. Denn spinnt man den Gedanken weiter, dann dürfte in so einem Fall auch kein TJSONBool heraus kommen sondern es müsste ein simpler Boolean sein (Objekt vs. einfacher Typ)
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 16:49
Bei TJSONObject ist mir ehrlich gesagt völlig egal, ob es als String oder Bool interpretiert wird. Ich caste das einfach nach Bedarf von TJSONValue nach TJSONString oder TJSONBool.
Du kannst aber nicht einfach casten wie du willst. Entweder steckt hinter dem Wert ein TJSONString oder es steckt dahinter ein TJSONBool. Du kannst kein TJSONValue das tatsächlich ein TJSONString ist nach TJSONBool casten ohne dass dir ggf. was um die Ohren fliegt!

Und zu der original Frage:

Ich hab ehrlich gesagt jetzt nicht in einer Spezifikation nachgeschaut aber meinem Verständnis nach ist

"True"

gültiges JSON. Es ist ein einzelner Json-String.

true

wäre auch gültig und wäre ein einzelner Json-Bool.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 17:09
Ich handhabe es ehrlich gesagt genauso, und hatte so auch noch nie Probleme beim Zusammenspiel von Delphis System.JSON und JSON-Bibliotheken für andere Sprachen, z.B. jsoncpp:
  1. "true" ist ein String
  2. true ist ein Boolean
  3. [true] ist ein Array mit einem Boolean drin
  4. usw.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 17:28
Ich habe den Parser jetzt dahingehend angepasst, dass man mit einem XPath "/" ein Rootelement ohne Objektstruktur als Wert ansprechen kann.

Davon unabhängig ist das Lesen von Bool-Strings mit TJSONObject dennoch seltsam:if ParseJSONValue('"true"') is TJSONBool then ... // Ergibt ein JA Womit immer noch nicht geklärt ist, wie der Parser hier eigentlich Strings von Bools unterscheidet.

Umgekehrt erzeugt er bei mir aber auch bei (JSONValue as TJSONBool).AsBoolen := True den String
Code:
"true"
Also mit Anführungszeichen. Das macht mich jetzt echt knülle weil ich nicht weiß was die Serverparser draus machen Ich hab da bisher nicht drauf geachtet...
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 17:35
Boolean Werte haben in JSON keine Anführungszeichen. Wenn der Server "true" schickt ist das technisch ein String. Was die Anwendung damit macht ist ne andere Sache.
"true" in einer JSON-Klasse als Boolean zu werten halte ich für falsch.

Was du da schreibst kann ich übrigens nicht nachvollziehen:
Delphi-Quellcode:
procedure TForm4.FormCreate(Sender: TObject);
var val: TJSONValue;
begin
  val := TJSONObject.ParseJSONValue('"true"');
  Caption := val.ClassName;
end;
val ist in dem Fall ein TJSONString, kein TJSONBool.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (22. Jan 2021 um 17:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 18:04
Ich muss das Montag mal in Ruhe durchgehen. Eben noch mal kurz mit der 10.3 CE getestet, da verhält sich das auch anders. Irgendwas stimmt mit dem TJSONObject-Parser in meinem dienstlichen 10.2.3 Pro nicht. Jetzt ist aber erst mal Wochenende
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  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 21:31 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-2025 by Thomas Breitkreuz