AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

JSON Wert lesen

Ein Thema von IMPEGA · begonnen am 8. Jan 2021 · letzter Beitrag vom 8. Jan 2021
Antwort Antwort
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

JSON Wert lesen

  Alt 8. Jan 2021, 10:48
Ich versuche vergeblich 3 Werte aus "art" lesen. (Bin nur ein Hobbyprogrammieren)
"id": "829",
"status": "1",
"changed": "2020-16-28 11:41:26"

Ohne diesen Array, komme ich mit JSON klar, sobald es geschachtelt wird kriege ich ständig Fehler.
Ich kann den zweiten Array nicht auslesen.

Mein JSON String
Code:
{
   "js":{
      "today":"67",
      "old":14,
      "selected_item":1,
      "data":[
         {
            "nr":"525",
            "name":"crane",
            "number":"26",
            "service_id":"723851235",
            "logo":"15.png",
            "art":[
               {
                  "id":"829",
                  "shelf":"12",
                  "status":"1",
                  "changed":"2020-16-28 11:41:26"
               }
            ],
            "use_logo":"1"
         },
         {
            "nr":"528",
            "name":"poetry",
            "number":"26",
            "service_id":"723851235",
            "logo":"15.png",
            "art":[
               {
                  "id":"829",
                  "shelf":"12",
                  "status":"1",
                  "changed":"2020-16-28 11:41:26"
               }
            ],
            "use_load_balancing":"1"
         }
      ]
   }
}

Das wäre mein normaler Fall
Code:
{
    "js": [
        {
            "id": "*",
            "name": "crane",
            "nr": "528",
            "service_id": "723851235",
            "logo": "15.png",
            "status": "1",
            "changed": "2020-16-28 11:41:26",
            "number": 56
        },
        {
            "id": "107",
            "name": "poetry",
            "nr": "358",
            "service_id": "6599235",
            "logo": "395.png",
            "status": "1",
            "changed": "2020-16-29 13:17:11",
            "number": 182
        }
    ]
}
So lese ich die Daten aus:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  ID : string;
  Status : string;
  Changed : string;
  JSonValue : TJSonValue;
  JsonArray : TJSONArray;
  ArrElement : TJSonValue;
begin
  JsonValue := TJsonObject.ParseJSONValue(Memo5.Text) as TJSONObject;
  JsonValue := (JsonValue as TJSONObject).Get('js').JSONValue;
    if (JSONValue is TJSONArray) then
      begin
        JSONArray := JsonValue as TJSONArray;
          for ArrElement in JSONArray do
            begin
              ID := ArrElement.GetValue<string>('id');
              Status := ArrElement.GetValue<string>('status');
              Changed := ArrElement.GetValue<string>('changed');
            end;
      end;
end;
Sobald ich in den Unterbereich "art" greifen will, bekomme ich ständig Fehler.
Ich poste hier kein Muster wie ich es versucht habe, weil es sehr viel Versuche waren.
Kann mir Jemand unter die Arme greifen? Wäre supi.

Geändert von IMPEGA ( 8. Jan 2021 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: JSON Wert lesen

  Alt 8. Jan 2021, 11:03
Welche Art denn? Sowohl data als auch art sind jeweils JSON-Arrays mit 0 bis X Elementen, demzufolge kann es auch 0 bis X Arten geben.

[edit] Hilft Dir das hier weiter? Nur schnell heruntergeschludert, normalerweise würde ich das auf mehrere Parsing-Methoden herunterbrechen.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  lJSON: TJSONObject;
  lInnerJSON: TJSONObject;
  Arr: TJSONArray;
  lInnerArr: TJSONArray;
  lArt: TJSONObject;
  Value: TJSONValue;
  i, j: integer;
  lID: string;
  lStatus: string;
  lChanged: string;
begin
  // Das gesamte JSON-Objekt
  lJSON := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONObject;
  try
    Value := lJSON.Values['js'];
    if Assigned(Value) and (Value is TJSONObject) then
      begin
        // Das js-Objekt
        lInnerJSON := TJSONObject(Value);
        Value := lInnerJSON.Values['data'];
        if Assigned(Value) and (Value is TJSONArray) then
          begin
            // Das data-Array
            Arr := TJSONArray(Value);
            for i := 0 to Arr.Count - 1 do
              if Arr.Items[i] is TJSONObject then
                begin
                  // Die einzelnen Objekte im data-Array
                  lInnerJSON := TJSONObject(Arr.Items[i]);
                  Value := lInnerJSON.Values['art'];
                  if Assigned(Value) and (Value is TJSONArray) then
                    begin
                      // Das art-Array je data-Objekt
                      lInnerArr := TJSONArray(Value);
                      for j := 0 to lInnerArr.Count - 1 do
                        if lInnerArr.Items[j] is TJSONObject then
                          begin
                            // Das gesuchte Objekt innerhalb des art-Arrays
                            lArt := TJSONObject(lInnerArr.Items[j]);
                            if not lArt.TryGetValue<string>('id', lID) then
                              lID := '';
                            if not lArt.TryGetValue<string>('status', lStatus)
                            then
                              lStatus := '';
                            if not lArt.TryGetValue<string>('changed', lChanged)
                            then
                              lChanged := '';
                            ShowMessage
                              (Format('ID: %s, Status: %s, Changed: %s',
                              [lID, lStatus, lChanged]));
                          end;
                    end;
                end;
          end;
      end;
  finally
    lJSON.Free;
  end;
end;
[/edit]
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

Geändert von DeddyH ( 8. Jan 2021 um 11:23 Uhr)
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: JSON Wert lesen

  Alt 8. Jan 2021, 11:54
Ui..., das ging aber schnell. Super. Vielen Dank.
An meinem Muster funktioniert es sehr gut.

Das wird auch in meinem Projekt funktionieren. Du hast mir das perfekt vorgemacht.
Darum ging es mir auch. Den Rest kann ich mir schon selbst aufbauen, da ist nämlich noch mehr was Probleme bereitet.
Nun habe ich einen Ansatz wie es zu realisieren ist.
Das reicht mir vollkommen. Ein wenig mitdenken muss ich ja auch. Sonst hätte es keinen Sinn.

Noch Mal. VIELEN DANK.
  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 04:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf