![]() |
Ist "true" valides JSON?
Hallo!
Das ist mal wieder eine Frage wo mir einfach kein gescheiter Titel eingefallen ist ^^ Ein REST-Server antwortet mir bei einem Request mit "true" im Response Body. Also nur diese vier Buchstaben, ohne jeglichen weiteren Markup. Wenn ich das so mit TJSONObject.ParseJSONValue() lade, gibt es mir ein TJSONBool-Objekt zurück. Jetzt frage ich mich, ob das "true" als solches überhaupt valides JSON ist oder ob ParseJSONValue() in dem Fall nicht Nil zurück geben müsste. Grüße Cody |
AW: Ist "true" valides JSON?
|
AW: Ist "true" valides JSON?
Ja.
Also für sich alleine ist es schon valide. (aber nur komplett kleingeschrieben) ![]() Da die viele JSON-Reader als "root" ein Objekt haben wollen .... aber dennoch ja Und wer nicht erst was downloaden will, da gibt es auch Mehreres: ![]() |
AW: Ist "true" valides JSON?
Laut Spezifikation auf
![]() Die Validierung z.B. auf ![]() Update: sorry, true ist ein valider boolean Wert, ich hatte die Doku zur McKeeman Form nicht gelesen. "true" ist auch valide, aber als String, nicht boolean. |
AW: Ist "true" valides JSON?
Zitat:
|
AW: Ist "true" valides JSON?
Zitat:
Er versteht nicht das If x <> 0 then -> if x then ein und das gleiche ist. Wie soll er dann so etwas verstehen. |
AW: Ist "true" valides JSON?
Wieder was gelernt! Den Fall muss ich dann entsprechend behandeln in meinem Parser. Gibt es noch mehr solche Spezialfälle? Zum Teil geben die REST-Server ja die wildesten Sachen aus, manchmal sind nicht alle Fehlerzustände abgefangen und der Server würgt nur eine Standard-HTML-Fehlerseite hervor :-(
Ich wünschte ich könnte meinen Parser mal veröffentlichen. Geht aber leider nicht, weil Auftragsarbeit. Das Ding stellt INI, JSON und XML auf eine gemeinsame Objektbasis und lässt sich mit XPath lesen und schreiben: (INI)
Code:
[mysection]
myvalue1=Foo myvalue2=Bar
Delphi-Quellcode:
(JSON)
Document['mysection/myvalue1'].AsString {= 'Foo'} {oder}
Document['mysection/[1]'].AsString {= 'Bar'}
Code:
{
"objarray": [ {"stringobj":"Foo"}, {"stringobj":"Bar"} ] }
Delphi-Quellcode:
Document['objarray[0]/stringobj'].AsString {= 'Foo'}
(XML)
Code:
<root>
<mygroup> <myvalue>Foo</myvalue> <myvalue>Bar</myvalue> </mygroup> </root>
Delphi-Quellcode:
Document['mygroup/myvalue[1]'].AsString {= 'Bar'}
Das Ziel war, den Export-Code nur einmal zu schreiben und dann je nach gewähltem Dateiformat nur die Parserklasse zu tauschen. Weil das aber so einfach zu benutzen ist, kommt es inzwischen auch im REST-Frontend zum Einsatz und da hab ich es immer wieder mit wilden Konstrukten zu tun die damals im Parser nicht berücksichtigt wurden. Zitat:
Zitat:
|
AW: Ist "true" valides JSON?
Ich kenne true oder false nur unquoted, laut
![]() |
AW: Ist "true" valides JSON?
Wenn man auf
![]() 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) |
AW: Ist "true" valides JSON?
Zitat:
Delphi-Quellcode:
und
true
Delphi-Quellcode:
, sowie
false
Delphi-Quellcode:
valide.
null
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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