AGB  ·  Datenschutz  ·  Impressum  







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

Anzahl Einträge in JsonArray

Ein Thema von rotwildmarcy · begonnen am 19. Sep 2024 · letzter Beitrag vom 26. Sep 2024
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.845 Beiträge
 
Delphi 12 Athens
 
#11

AW: Anzahl Einträge in JsonArray

  Alt 20. Sep 2024, 09:08
Damit erzeugt der Zugriff auf das 10te Element eine Zugriffsverletzung. Die Schleife darf also nur bis Count - 1 gehen.
Müsste aber eine EArgumentOutOfRangeException sein.

TJSONArray.GetValue -> TList<T>.GetItem -> CheckItemRange -> ErrorArgumentOutOfRange -> raise EArgumentOutOfRangeException

Ohhh, steht so sogar in der Doku drin.
Zitat:
Delphi-Quellcode:
    /// <summary> Returns the array element. Raises EArgumentOutOfRangeException exception if index is out of range </summary>
    /// <param name="Index">- element index</param>
    /// <returns>JSONValue element</returns>
    property Items[const Index: Integer]: TJSONValue read GetValue; default;

Wie gesagt, siehe #3 und #8 .... ich tippe auf das zu kurze IF, bzw. das dahinter


Zitat:
Das wirft mir aber eime Zugriffsverletzung aus.
Oder dieser Text ist gelogen falsch wiedergegeben.

Du wirst es nicht glauben, aber Strg+C funktioniert bei fast allen Dialog-Fenstern, sowie im Logfenster des Delphi,
und dann hier in einem [QUOTE] ein Strg+V.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Sep 2024 um 09:14 Uhr)
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
19 Beiträge
 
#12

AW: Anzahl Einträge in JsonArray

  Alt 20. Sep 2024, 09:20
Danke für die ganzen Tips!

Bevor ich mich den Fehler in der Schleife widme, würde ich gerne die vorgelagerte Problematik der Anzahl Einträge lösen.

Array.Count gibt immer die 49 zuück, egal wieviele Einträge tatsächlich existieren.
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
19 Beiträge
 
#13

AW: Anzahl Einträge in JsonArray

  Alt 20. Sep 2024, 09:22
Zitat:
Das wirft mir aber eime Zugriffsverletzung aus.
Oder dieser Text ist gelogen falsch wiedergegeben.

Erste Gelegenheit für Exception bei $0086929C. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x0086929c: read of address 0x81f98114'. Prozess Project1.exe (41052)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
470 Beiträge
 
#14

AW: Anzahl Einträge in JsonArray

  Alt 20. Sep 2024, 19:00
Bevor ich mich den Fehler in der Schleife widme, würde ich gerne die vorgelagerte Problematik der Anzahl Einträge lösen.
Du kannst den JSON-Viewer aus diesem Artikel ausprobieren. Der Quelltext ist mit dabei.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
19 Beiträge
 
#15

AW: Anzahl Einträge in JsonArray

  Alt 25. Sep 2024, 15:26
Vielen Dank an alle! Das ganze läuft mittlerweile, allerdings hat sich ein (für mich) viel größeres Problem aufgetan, wo mir so jeglicher Ansatzpunkt fehlt.

So sieht das ganze bis dato aus und läuft auch.

Code:
var
  JSonObject: TJSonObject;
  JSonValue: TJSonValue;
  JSonArray: TJsonArray;
  id, name, description, sku: string;
  i,j: integer;
begin
JsonValue := TJSONObject.ParseJSONValue(Memo1.Text);

  if Assigned(JsonValue) then
  try
    JSonArray := JsonValue as TJSONArray;
    j := 1;
    for i := 0 to JSonArray.Count-1 do
    begin
      JSonObject := JSonArray.Items[i] as TJSonObject;

      id := JSonObject.GetValue('id').Value;
      sku := JSonObject.GetValue('sku').Value;
      description := JSonObject.GetValue('description').Value;
      name := JSonObject.GetValue('name').Value;
     
      //Überschriften
      StringGrid1.Cells[0,0] := 'ID';
      StringGrid1.Cells[1,0] := 'Artikelnummer';
      StringGrid1.Cells[2,0] := 'Name';
      StringGrid1.Cells[3,0] := 'Preis';
      StringGrid1.Cells[4,0] := 'Beschreibung';

      // Daten
      StringGrid1.Cells[0,j] := id;
      StringGrid1.Cells[1,j] := sku;
      StringGrid1.Cells[2,j] := name;
      StringGrid1.Cells[3,j] := price1;
      StringGrid1.Cells[4,j] := description;

      Inc(j);
    end;
  finally
    JsonValue.Free;
  end;
end;
Jetzt habe ich aber festegestellt, dass ich auch noch ein paar Info's brauche, welche tiefer verschachtelt sind und sich (vermutlich) per Name nicht ansprechen lassen.
Und genau endet mein eh bescheidenes KnowHow im Moment.
Ich habe die Struktur mal angehangen. Der Knoten 'bm_psi_bulk_prices' ist auf jeden Fall immer vorhanden, aber nicht zwangsläufig gefüllt, und kann auch mehr oder weniger Einträge haben.
Danke für einen kleinen Ansatz, wie ich mich da rantasten kann.
Miniaturansicht angehängter Grafiken
screenshot-2024-09-25-124128.png  
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
283 Beiträge
 
#16

AW: Anzahl Einträge in JsonArray

  Alt Gestern, 06:51
Ich habe die Struktur mal angehangen. Der Knoten 'bm_psi_bulk_prices' ist auf jeden Fall immer vorhanden, aber nicht zwangsläufig gefüllt, und kann auch mehr oder weniger Einträge haben.
Danke für einen kleinen Ansatz, wie ich mich da rantasten kann.
Wie Himitsu ja auch schon mehrfach geschrieben hat, würde ich ein GetValue('bm_psi_bulk_prices') AS TJSONObject oder GetValue('bm_psi_bulk_prices') AS TJSONArray versuchen, je nachdem was dort drin steht (Ohne JSON Struktur mehr Glaskugel als wirklich Hilfe). Ist der Punkt gefüllt hast du dein Arrray/Object in der übergabe oder eben NIL. Das heißt vorher auf nil prüfen wenn nil dann nix machen, wenn nicht nil, dann weiter mit dem was auch immer du machen willst.

Ich weiß der Einsprung in JSON kann einem einen guten Knoten in den Kopf machen, aber so Schwer ist das eigentlich nicht:
JSON hat eigentlich nur 3 Unterschiedliche Arten, der Datenübertragung.
1.) JSONArray - gekennzeichnet durch []
2.) JSONObject - gekennzeichnet durch {}
3.) JSONValue - Key/value pair im Aufbau "MeinString":"mein String" oder "MeinInteger":123

alles wird immer von nächsten Wert mit einem Komma abgegrenzt. Zu allen Teilen gibt es in Delphi Entsprechungen (Mehrfach) die das einlesen können und mit dem du die Struktur durchgehen kannst.
Alle Möglichkeiten findest du hier:
https://docwiki.embarcadero.com/RADS...Athens/en/JSON



vG
Patrick

PS: Hab gerade das BIld gesehen, ist noch Früh
Also die Abfrage wäre dann auf GetValue('value') AS TJSONArray. Das Array musst du dann wieder einzeln durchgehen und die einzelnen Objects auslesen, wenn das Array nicht nil ist.
Ich würde dir Empfehlen JSON Code in z.B. Notepad++ anzusehen, lade dir zur not einen JSON prettyfier herunter. Dann siehst du aber auch direkt was ein Array und was ein Objekt ist, hab das Gefühl durch deinen Viewer machst du dir den Einstieg nur noch schwieriger.

Geändert von fisipjm (Gestern um 06:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:13 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