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
Seite 2 von 2     12   
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 14:17
Was die Spezifikation der Schnittstelle des Servers betrifft, da kommt es drauf an, was sie für "Daten" erwartet.
Da kann es auch sein, dass sie einen String verlangt, in dem die Textrepresentation einen booleanischen Wertes vorliegt.
Ja da muss man höllisch aufpassen. Wenn dort C-kompatible Vergleiche geschehen, dann gilt:

(links Client-Request, rechts Server)
true=true
false=false
"true"=true
"false"=true
0=false
1=true
>1=true
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 himitsu
himitsu

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

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 15:02
0=false
"0"=true

Ja, wenn man den "Stringinhalt" nicht interpretiert, dann
* ein leerer String ist 0
* ein String mit irgendwas drin, der ist ungleich 0

* und alles ungleich 0 (C=null, D=nil) ist true
(da wird quasi einfach alles hart nach Integer gecastet und =0 ist false, sowie <>0 wird true)
$2B or not $2B

Geändert von himitsu (22. Jan 2021 um 15:20 Uhr)
  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
 
#13

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 17: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.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 18: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.272 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 18: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
 
#16

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 18: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 18:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Ist "true" valides JSON?

  Alt 22. Jan 2021, 19: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
Seite 2 von 2     12   


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 15:47 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