Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: JSON Wert lesen

  Alt 8. Jan 2021, 12: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 12:23 Uhr)
  Mit Zitat antworten Zitat