Update :
Über
RTTI besorge ich mir die Namen aller Properies meiner Klasse als Stringliste.
Diese Stringliste übergebe ich dann an meine JSON Auswerte +
CSV File schreibe funktion.
Eine dynamische Ermittlung alle Namen aus dem JSON File wäre besser (flexibler) für mich.
Wer ähnliche Ausfgaben hat kann hier gerne auch was posten
, aktuell bin ich einen Schritt weiter.
Delphi-Quellcode:
procedure TMyForm.ShowJSONarraylistUsingProperties
(sLst: TStringlist; csvfilename: String);
var
jsArr: TJSONArray;
originalObject: TJsonObject;
jsPair: TJsonPair;
jsObj: TJsonObject;
JsVAl: TJsonValue;
i: Integer;
Singleline: string;
HeaderCSV: string;
DataCSV: string;
csvfile: TStringlist;
begin
csvfile := TStringlist.Create;
try
JsVAl := TJsonObject.ParseJSONValue(FJSONStr);
// value as object
originalObject := JsVAl as TJsonObject;
// get pair, wich contains Array of objects
jsPair := originalObject.Get('listHelper');
// pair value as array
jsArr := jsPair.jsonValue as TJSONArray;
// writeln('array size: ', jsArr.Size);
// enumerate objects in array
for i := 0 to jsArr.Size - 1 do
begin
LogMemo.Lines.Add('element ' + IntTostr(i));
// i-th object
jsObj := jsArr.Get(i) as TJsonObject;
HeaderCSV := '';
DataCSV :='';
// enumerate object fields
for jsPair in jsObj do
begin
if (sLst.IndexOf(jsPair.JsonString.Value) > 0) then
begin
Singleline := Singleline + ' [' + jsPair.JsonString.Value + ' : ' +
jsPair.jsonValue.Value + '] ';
HeaderCSV := HeaderCSV + jsPair.JsonString.Value+ '; ';
DataCSV := DataCSV + jsPair.jsonValue.Value + '; ';
end;
end;
if i = 0 then
csvfile.Add(HeaderCSV);
csvfile.Add(DataCSV);
LogMemo.Lines.Add(Singleline);
end;
finally
csvfile.SaveToFile(csvfilename);
csvfile.Free;
end;
end;