procedure TForm1.Button1Click(Sender: TObject);
type
TData = record
total,
energy,
tax: double;
startsAt: string;
end;
var
s: string;
d, o: TJsonData;
ja: TJsonArray;
jo: TJsonObject;
a: array of TData;
I: Integer;
begin
// put your values from Tibber in s:
s := '{"data":{"viewer":{"homes":[{"currentSubscription":{"priceInfo":{"current":{"total":1.4904,"energy":1.1843,"tax":0.3061,"startsAt":"2022-02-05T11:00:00.000+01:00"}}}},{"currentSubscription":{"priceInfo":{"current":{"total":1.4904,"energy":1.1843,"tax":0.3061,"startsAt":"2022-02-05T11:00:00.000+01:00"}}}}]}}}';
d := GetJSON(s);
o := d.FindPath('data.viewer.homes');
if (o <> nil) and (o.JSONType = jtArray) then begin
ja := TJsonArray(o);
SetLength(a, ja.Count);
for I := 0 to ja.Count - 1 do begin
o := ja.Objects[I].FindPath('currentSubscription.priceInfo.current');
if (o <> nil) and (o.JSONType = jtObject) then begin
jo := TJsonObject(TJsonObject(o));
with a[I] do begin
total := jo.Floats['total'];
energy := jo.Floats['energy'];
tax := jo.Floats['tax'];
startsAt := jo.Strings['startsAt'];
end;
end;
end;
end;
d.Free;
for I := 0 to High(a) do begin
Memo1.Append('Item ' + I.ToString);
Memo1.Append(' total: ' + a[I].total.ToString);
Memo1.Append(' energy: ' + a[I].energy.ToString);
Memo1.Append(' tax: ' + a[I].tax.ToString);
Memo1.Append(' startsAt: ' + a[I].startsAt);
end;
end;