AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML-Schema auswerten (Link)

Offene Frage von "NoGAD"
Ein Thema von NoGAD · begonnen am 21. Feb 2020 · letzter Beitrag vom 23. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#1

XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 07:04
Hallo,


ich habe ein XML-ähnliches Schema (https://www.googleapis.com/books/v1/...s?q=1696290007) und möchte dieses per Code analysieren.

Wichtig sind mir nur einige Werte.

Code:
 "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ö ...
weiter unten gibt es dann noch interessante Werte, welche jedoch nicht immer vorhanden sind.

Code:
  "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"
Das ganze ist eine ISBN-Abfrage. Google ist hier die Wahl, weil die meisten Bücher hinterlegt sind.



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
Mathias
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 07:20
Das Format aus dem Link - sieht für mich nach json aus.
aus SO: https://stackoverflow.com/questions/...ring-in-delphi

Grüße
Klaus
Klaus

Geändert von Klaus01 (21. Feb 2020 um 07:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 08:09
Je nach Delphi-Version kannst Du das mit REST.Json, System.Json oder externen Libs wie SuperObject auswerten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 08:19
Danke. Der Link von Klaus hat sehr weitergeholfen.


Code:
JsonValue.GetValue<string>
Die Art der Typdeklaration kenne ich nicht. (<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:
  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;
In der Zeile Authors := erfolgt eine Exception bezüglich Typumwandlung.
Mathias
  Mit Zitat antworten Zitat
jobo

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

AW: XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 08:23
Das Format scheint hier beschrieben zu sein.
https://schema.org/Book

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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: XML-Schema auswerten (Link)

  Alt 21. Feb 2020, 08:29
Das Array habe ich gefunden.

Code:
  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;
Damit klappt es.

@jobo: ich gucke es mir an
Mathias
  Mit Zitat antworten Zitat
jobo

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

AW: XML-Schema auswerten (Link)

  Alt 22. Feb 2020, 10:30
@jobo: ich gucke es mir an
Ich hab Dir ein Beispiel gebaut, das zeigt, was geht bzw. was ich meine. Ist natürlich nicht vollständig und vielleicht nicht anwendbar für Dich, aber einfach sehr bequem (und erprobt).
https://rextester.com/discussion/YNM...json-operators
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: XML-Schema auswerten (Link)

  Alt 22. Feb 2020, 16:57
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
Mathias
  Mit Zitat antworten Zitat
jobo

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

AW: XML-Schema auswerten (Link)

  Alt 23. Feb 2020, 07:17
das was Du mir da als Link geschickt hast, ist mir zu hoch.
Das kann ich nicht recht glauben. Du hast wahrscheinlich zu kurz drauf geschaut
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: XML-Schema auswerten (Link)

  Alt 23. Feb 2020, 15:32
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:
  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' );
Wie bekomme ich die anzahl der Elemente von Items?

In folgendem Beispiel sind es 10: https://www.googleapis.com/books/v1/...=9783499244551

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
Mathias

Geändert von NoGAD (23. Feb 2020 um 16:01 Uhr) Grund: Selbst gefunden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:54 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