![]() |
XML-Schema auswerten (Link)
Hallo,
ich habe ein XML-ähnliches Schema ( ![]() Wichtig sind mir nur einige Werte.
Code:
weiter unten gibt es dann noch interessante Werte, welche jedoch nicht immer vorhanden sind.
"items": [
{ "kind": "books#volume", "volumeInfo": { "title": "Schwungübungen Ab 5 Jahren", "subtitle": "Übungsheft Mit Schwungübungen Zur Erhöhung Der Konzentration, Augen-Hand-Koordination Und Feinmotorik. Ideale Vorbereitung Für Kindergarten Und Vorschule!", "authors": [ "Laura Eichelberger" ], "publishedDate": "2019-09-28", "description": "Sie möchten die Konzentration Ihres Kindes fö ...
Code:
Das ganze ist eine ISBN-Abfrage. Google ist hier die Wahl, weil die meisten Bücher hinterlegt sind.
"imageLinks": {
"smallThumbnail": "http://books.google.com/books/content?id=DM1JygEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api", "thumbnail": "http://books.google.com/books/content?id=DM1JygEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api" Meine Frage dazu lautet: Was ist das für ein Schema und gibt es eine einfache Möglichkeit, dieses zu interpretieren - ohne dass ich mit Pos nach Strings suchen muss? Momentan lese ich das in ein TMemo ein, um damit herumzubasteln. Danke und LG Mathias |
AW: XML-Schema auswerten (Link)
Das Format aus dem Link - sieht für mich nach json aus.
aus SO: ![]() Grüße Klaus |
AW: XML-Schema auswerten (Link)
Je nach Delphi-Version kannst Du das mit REST.Json, System.Json oder externen Libs wie
![]() |
AW: XML-Schema auswerten (Link)
Danke. Der Link von Klaus hat sehr weitergeholfen.
Code:
Die Art der Typdeklaration kenne ich nicht. (<string>)
JsonValue.GetValue<string>
Wie sah das früher für diesen Fall aus, bevor es diese Art der Zuweisung gab? Und eine zweite Frage. Ein Problem mit Arrays habe ich noch. Der JSON Node für diverse Items könnte ein Array sei, so wie es bei Authors ist. Wäre es da nicht gleich einfacher, ich würde generell alle Werte in ein Array einlesen und dieses dann auswerten, auch wenn es nur ein einzelner String ist (wie bei title)? Doch wie kann ich das Array direkt einlesen - Array of String funktioniert nicht bei der Typdeklaration. Mein Code sieht nun für Tests wie folgt aus.
Code:
In der Zeile Authors := erfolgt eine Exception bezüglich Typumwandlung.
var
JSonValue : TJSonValue; items : string; Authors: TStrings; begin Memo2.Clear; JSonValue := TJSonObject.ParseJSONValue( Memo1.Text ); items := JSonValue.GetValue< string >( 'items[0].volumeInfo.title' ); Memo2.Lines.Add( items ); Authors := JSonValue.GetValue< TStrings >( 'items[0].volumeInfo.authors' ); Memo2.Lines.AddStrings( Authors ); items := JSonValue.GetValue< string >( 'items[0].volumeInfo.publishedDate' ); Memo2.Lines.Add( items ); JSonValue.Free; end; |
AW: XML-Schema auswerten (Link)
Das Format scheint hier beschrieben zu sein.
![]() Google bietet ja offenbar eine Api dazu. Gute Datenbanksysteme erlauben die Abfrage von JSON wie diesem oben unabhängig von individuellen Ausprägungen per SQL. Dabei kannst Du innerhalb SQL auch gleich Existenz-Prüfungen für Objekte nutzen und so wirklich fehlerfrei Daten abfragen, die vorhanden sind und Dich interessieren. P.S.: Objekte und Arrays kannst Du damit nahezu beliebig zerlegen und transformieren. |
AW: XML-Schema auswerten (Link)
Das Array habe ich gefunden.
Code:
Damit klappt es.
var
JSonValue : TJSonValue; Authors : TJSONArray; Items : string; i : Integer; begin Memo2.Clear; JSonValue := TJSonObject.ParseJSONValue( Memo1.Text ); Items := JSonValue.GetValue< string >( 'items[0].volumeInfo.title' ); Memo2.Lines.Add( Items ); Authors := JSonValue.GetValue< TJSONArray >( 'items[0].volumeInfo.authors' ); for i := 0 to Authors.Size - 1 do Memo2.Lines.Add( Authors.Get( i ).Value ); Items := JSonValue.GetValue< string >( 'items[0].volumeInfo.publishedDate' ); Memo2.Lines.Add( Items ); JSonValue.Free; @jobo: ich gucke es mir an :-) |
AW: XML-Schema auswerten (Link)
Zitat:
![]() |
AW: XML-Schema auswerten (Link)
Hallo Jobo,
das was Du mir da als Link geschickt hast, ist mir zu hoch. Mit Postgres habe ich noch nie zu tun gehabt, ich filtere es momentan anders, ein Beispiel stelle ich später hier rein, wenn es fehlerfrei läuft. LG Mathias |
AW: XML-Schema auswerten (Link)
Zitat:
Es ist eine sehr bequeme Art-wenn nicht sogar faule-, JSON zu lesen. Ohne es verstehen zu müssen: Ein einziges SQL Select Statement liefert Dir alle Felder, die Du aus dem JSON brauchst/haben möchtest, ohne Substring-Krieg und Frickelei. Ich kenne Deinen Bedarf an Feldern aus dem books Schema nicht, aber ich behaupte, dass man mit einem Select alles auslesen kann, was benötigt wird. Mein Beispiel enthält natürlich nur 5 Felder und die sind nicht mal alle aus dem books schema. Ganz generell mal die Anmerkung, dass natürlich mit der Existenz eines Hammers nicht jedes Problem zu einem Nagel gemacht werden kann. Mein Vorschlag SQL zu nutzen macht nur unter bestimmten Bedingungen Sinn. Wenn sowieso SQL genutzt wird, wenn tatsächlich viele oder sehr viel Daten bewegt werden. Am Ende ist es wahrscheinlich egal, welchen Weg man geht, um JSON zu lesen oder zu schreiben. Die Botschaft ist hauptsächlich, dass man eine geeignete, erprobte Libary/Unit dafür nimmt, statt mit substr usw. zu Fuß rumzueiern. Mein Vorschlag ist hier halt PostgreSQL. Wenn Dir SQL nicht fremd ist, dann ist Postgres natürlich nicht automatisch an Bord bzw. im Projekt und sicher "Kanonen auf Spatzen". Ich habe es nur genommen, weil es das kann und ich es häufig nutze. Als kleiner, feiner Ersatz könnte auch SQLite dienen. Dessen JSON Funktionen sind aber irgendwie anders gestrickt. |
AW: XML-Schema auswerten (Link)
Hallo nochmal,
bisher klappt alles ganz gut, indem ich den json String parse. Leider habe ich noch ein Problem mit der ersten Variable in der Struktur: items. Das ist ein Array, von welchem ich die Anzahl der Elemente nicht auslesen kann. Also so etwas wie
Code:
Wie bekomme ich die anzahl der Elemente von Items?
var
JSonObject : TJSONObject; JSonValue : TJSonValue; Items : TJSonArray; TotalItems : Integer; Dummy_String : String; begin Dummy_String := IdHTTP1.Get( Dummy_String ); JSonObject := TJSONObject.ParseJSONValue( Dummy_String ) as TJSONObject; JSonValue := TJSONObject.ParseJSONValue( Dummy_String ); TotalItems := JSonValue.GetValue< Integer >( 'totalItems' ); if TotalItems = 0 then begin ShowMessage( Message_ISBN_NoItems ); Exit; end; Items := JSonObject.GetValue< TJSonArray >( 'Items' ); In folgendem Beispiel sind es 10: ![]() LG Mathias Edit: Habe es gefunden, war eine Blockade ;-)
Code:
if JSonObject.TryGetValue( 'items', Items ) then
Items := JSonValue.GetValue< TJSONArray >( 'items' ); { : Mehrere Items wurden gefunden, in eine Auswahlliste : } if Items.Count > 1 then |
AW: XML-Schema auswerten (Link) - JSON
Kleiner Hinweis: Kannst du vielleicht den Titel mal anpassen, falls jemand anders später danach sucht. Hier wird ja kein XML-Schema ausgewertet, sondern ein JSON eingelesen. Danke.
|
AW: XML-Schema auswerten (Link) - JSON
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 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