Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TJSONValue und suche Token mit Punkt im Namen (https://www.delphipraxis.net/201484-tjsonvalue-und-suche-token-mit-punkt-im-namen.html)

Bernhard Geyer 25. Jul 2019 14:10

Delphi-Version: 5

TJSONValue und suche Token mit Punkt im Namen
 
Ich habe hier eine JSON, bei dem ein JSON im Namen einen Punkt hat.
Damit habe ich das Problem das

StatusJSON.GetValue<String>('<Level1>.<Level2_Mit_ Punkt>.<Level3>');
nicht mehr geht, da er durch den Punkt "außer Tritt kommt".

Kann man evtl. den Pfad-Trenner konfigurieren?

Dennis07 26. Jul 2019 12:01

AW: TJSONValue und suche Token mit Punkt im Namen
 
JSON ist JacaScript, und somit zunächst zur letzten Frage: Auch, wenn du es könntest, wäre es halt kein JSON mehr.
Und zum eigentlichen Problem: ein Punkt im Namen ist bei JSON unzulässig und müsste somit (meines Wissens nach) zu einer Fehlermeldung führen. Das darfst du einfach nicht, du musst den Punkt bei der Eingabe und der Abfrage irgendwie Escapen (zB. durch einen Unrerstrich).

Bernhard Geyer 26. Jul 2019 14:48

AW: TJSONValue und suche Token mit Punkt im Namen
 
Ein Check mit

https://jsonlint.com/
https://jsonformatter.curiousconcept.com/

sagt: Alle OK.
Also muss es gehen.
Blos wie in der Delphi-Implementierung?

jobo 26. Jul 2019 15:25

AW: TJSONValue und suche Token mit Punkt im Namen
 
die Punktnotation ist doch eher Javascript als JSON oder?
Ich mein

"name":"Value"

aber in js
kunde.name:'Value'

Der schöne Günther 26. Jul 2019 15:32

AW: TJSONValue und suche Token mit Punkt im Namen
 
Nimm die Variante ohne Generics. Sieht man auch an den Parametern: Bei der nicht parametrisierten Variante heißt der Parameter "Name", bei der mit Generics heißt er "Path".

Delphi-Quellcode:
uses
   System.SysUtils,
   System.Json;

const
   input = '{"some.value": "Hello"}';
var
   jsonObject:      TJSONObject;
   jsonValue:      TJSONValue;
   stringValue:   String;
begin
   jsonObject := TJSONObject.ParseJSONValue(input) as TJSONObject;
   jsonValue := jsonObject.GetValue('some.value'); // Findet er
   stringValue := jsonObject.GetValue<String>('some.value'); // Findet er NICHT
end.

Bernhard Geyer 3. Aug 2019 20:28

AW: TJSONValue und suche Token mit Punkt im Namen
 
Danke. Funktioniert.
Muss das zwar in zwei schritte machen, da der problematische Key erst auf zweiter Ebene kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 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