Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#10

AW: JSON iterieren, aber wie?

  Alt 26. Sep 2022, 21:41
Wie lese ich denn das aus?
"length": [
0,
"mm"
]
Mit Hilfe von mORMot lassen sich einzelne Wert auslesen, oder die gesamte Struktur als Objekt/Record abbilden.

Der Zugriff auf einzelne Werte erfolgt so:
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.text,
  mormot.core.variants;

var
  doc: TDocVariantData;
  item: PDocVariantData;
  itemDim: PDocVariantData;
begin
  doc.InitJsonFromFile('data.json', JSON_[mFastFloat]);
  for item in doc.A['data'].Objects do
  begin
    itemDim := item.O['article'].O['dimensions'];
    with itemDim.A['length']^ do
      ShowMessage(Utf8ToString(FormatUtf8('Length: %%', [Value[0], Value[1]])));
  end;
Die JSON Daten als Record abbilden, gelingt so:
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.json,
  mormot.core.text,
  mormot.core.os;
  
type
  TDataRec = record
    data: array of record
      article: record
        id: Integer;
        dimensions: record
          length: array of Variant;
          width: array of Variant;
          height: array of Variant;
        end;
      end;
    end;
    meta: record
      pagination: record
        total: Integer;
        count: Integer;
      end;
    end;
  end;

var
  i: Integer;
  rec: TDataRec;
  json: RawJson;
begin
  json := StringFromFile('data.json');
  if RecordLoadJson(rec, json, TypeInfo(TDataRec)) then
  begin
    for i := 0 to High(rec.data) do
    begin
      with rec.data[i].article.dimensions do
        ShowMessage(Utf8ToString(FormatUtf8('Length: %%', [length[0], length[1]])));
    end;
  end;
Die Record Definition muss die JSON Werte nicht vollständig abbilden, wenn zum Einlesen der Mode Tolerant gewählt wird.

Bis bald...
Thomas
  Mit Zitat antworten Zitat