![]() |
Rest JSON
Hallo,
ich teste gerade die Rest Komponenten mit JSON. Verschiedene Dienste habe ich schon gut "anzapfen" können.Aber ein Problem bleibt wenn zb. ein knoten oder ein Element nicht vorhanden ist wieder erwarten, schmiert die Anwendung ab. Wie kann ich das vorhandensein eines Eintrags überprüfen...? das hier soll jetzt mal nur als Beispiel dienen....
Delphi-Quellcode:
nur wenn jetzt zb. der Eintrag 'authors' fehlt , bekomme ich eine Fehlermeldung und der Rest wird natürlich auch nicht mehr abgearbeitet.
Title := MainForecast.GetValue('title').Value;
Publisher := MainForecast.GetValue('publisher').Value; PublishedDate := MainForecast.GetValue('publishedDate').Value; Description := MainForecast.GetValue('description').Value; SeitenAnzahl := MainForecast.GetValue('pageCount').Value; Sprache := MainForecast.GetValue('language').Value; Autor := MainForecast.GetValue('authors') as TJSONArray; Autoren := Autor.Items[0].Value; ISBNCode := MainForecast.GetValue('industryIdentifiers') as TJSONArray; Code13:= TJSONObject(ISBNCode.Items[1]).GetValue('identifier').Value; CodeTyp13 := TJSONObject(ISBNCode.Items[1]).GetValue('type').Value; Code10:= TJSONObject(ISBNCode.Items[0]).GetValue('identifier').Value; CodeTyp10 := TJSONObject(ISBNCode.Items[0]).GetValue('type').Value; Imagelinks := MainForecast.GetValue('imageLinks') as TJSONObject; BildPfad := ImageLinks.GetValue('thumbnail').Value; Categories := MainForecast.GetValue('categories') as TJSONArray; Kategorie := Categories.Items[0].Value; Meine Frage ist schlicht ....wie kann ich auf nicht vorhandene Knoten/Einträge reagieren..und mit dem nächsten Eintrag fortfahren... Borstenei |
AW: Rest JSON
Kuckst du Doku
![]() z.B.:
Delphi-Quellcode:
,
TryGetValue
Delphi-Quellcode:
,
Count
Delphi-Quellcode:
Values
|
AW: Rest JSON
Hallo Sir Rufo,
Danke für den Tipp. Aber damit habe ich auch schon rum experimentiert. Ich komme aber mit dem
Delphi-Quellcode:
nicht weiter, auch finde ich im Internet kein entsprechendes Sample.
TryGetValue
Irgendwie finde ich es ungewöhnlich das niemand das nichtvorhandensein prüft?!. Ich habe mir das "Delphi Cookbook" von Daniele Teti gekauft aber auch hier in den Beispielen finden nirgends eine überprüfung statt. Kann mir jemand hier mal auf die Sprünge helfen? Borstenei |
AW: Rest JSON
Nun das
Delphi-Quellcode:
arbeitet genauso wie alle
TryGetValue
Delphi-Quellcode:
Varianten (
Try
Delphi-Quellcode:
, ...)
TryStrToInt
Delphi-Quellcode:
oder auf dein Beispiel angewendet
if LJSONObject.TryGetValue<string>(
{ APath } 'author', { out AValue } LStr ) then WriteLn( 'author found: ', LStr ) else WriteLn( 'author not found!' );
Delphi-Quellcode:
Wenn dir das zu umständlich ist, dann bau dir einfach einen Helper
if MainForecast.TryGetValue<string>( 'title', LStr ) then
Title := LStr else Title := '';
Delphi-Quellcode:
und dann geht das einfach so
type
TJSONValueHelper = class helper for TJSONValue public function GetValue<T>( const APath: string; ADefault: T ): T; end; function TJSONValueHelper.GetValue<T>( const APath: string; ADefault: T ): T; begin if not TryGetValue<T>( APath, Result ) then Result := ADefault; end;
Delphi-Quellcode:
Title := MainForecast.GetValue<string>(
{ APath } 'title', { ADefault } '' ); |
AW: Rest JSON
Danke Dir Sir Rufo für Deine Mühe,
super schlanke Lösung. Allerdings bekomme ich das nur umgesetzt wenn Bezeichner vorhanden sind, in diesem Fall
Delphi-Quellcode:
bekomme ich das wieder nicht mit
Categories := MainForecast.GetValue('categories') as TJSONArray;
Kategorie := Categories.Items[0].Value;
Delphi-Quellcode:
umgesetzt.
TryGetValue
Ich habe hier jetzt einfach ein
Delphi-Quellcode:
eingefügt.
Try Except
Borstenei |
AW: Rest JSON
Wieso das, ein simples
Delphi-Quellcode:
reicht doch aus :gruebel:
If Assigned( Categories ) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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