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:
Document['mysection/myvalue1'].AsString {= 'Foo'} {oder}
Document['mysection/[1]'].AsString {= 'Bar'}
(JSON)
Code:
{
"objarray": [
{"stringobj":"Foo"},
{"stringobj":"Bar"}
]
}
Document['objarray[0]/stringobj'].AsString {= 'Foo'}
(
XML)
Code:
<root>
<mygroup>
<myvalue>Foo</myvalue>
<myvalue>Bar</myvalue>
</mygroup>
</root>
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.
Gibt der Client im Accept denn auch an, dass er JSON haben möchte?
Aber klar doch, Application/JSON
Genau, das wäre auch meine Denke gewesen. Aber ich habe an anderer Stelle auch Responses wie {"myobject":true} die ebenfalls von TJSONObject klaglos verdaut werden obwohl ich das nur so kenne: {"myobject":"true"}