AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TJSONValue und suche Token mit Punkt im Namen

Ein Thema von Bernhard Geyer · begonnen am 25. Jul 2019 · letzter Beitrag vom 3. Aug 2019
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#1

TJSONValue und suche Token mit Punkt im Namen

  Alt 25. Jul 2019, 14:10
Delphi-Version: 5
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
481 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TJSONValue und suche Token mit Punkt im Namen

  Alt 26. Jul 2019, 12:01
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).
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TJSONValue und suche Token mit Punkt im Namen

  Alt 26. Jul 2019, 14:48
Ein Check mit

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

sagt: Alle OK.
Also muss es gehen.
Blos wie in der Delphi-Implementierung?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: TJSONValue und suche Token mit Punkt im Namen

  Alt 26. Jul 2019, 15:25
die Punktnotation ist doch eher Javascript als JSON oder?
Ich mein

"name":"Value"

aber in js
kunde.name:'Value'
Gruß, Jo
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: TJSONValue und suche Token mit Punkt im Namen

  Alt 26. Jul 2019, 15:32
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.

Geändert von Der schöne Günther (26. Jul 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TJSONValue und suche Token mit Punkt im Namen

  Alt 3. Aug 2019, 20:28
Danke. Funktioniert.
Muss das zwar in zwei schritte machen, da der problematische Key erst auf zweiter Ebene kommt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:25 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