фреймворк "Readers and Writers JSON Framework"
В 10.3 появился новый фреймворк для работы с JSON "Readers and Writers JSON Framework".
Не совсем понятно что там является собственно JSON объектом.
Допустим есть два класса словарь TGlossary = class(TObjectList) и статья TGlEntry = class(TComponent). Словарь собственно и содержит статьи как свои объекты.
У словаря есть метод procedure SaveToJSON(const AFileName: String);
который в цикле сохраняет статьи в формате JSON. У статьи есть метод function TGlEntry.GetEntryJSON: TStringBuilder; который выдает свойства статьи как JSON строку:
{
"Wrd": "аба",
"Sample": 1,
"Gender": 2,
"Soul": false,
"DeclType": 1,
"Plural": false,
"Suffix": "",
"Accent": true,
"RunVocal": false,
"Circle": false,
"Ring1": false,
"Ring2": false,
"Note": ""
}
в SaveToJSON словаря хочу получить некий JSON который содержит все статьи словаря, примерно так:
{
"DateCreation": "28.01.2021 12:26:03:173",
"Words": [
{
"Wrd": "аба",
"Sample": 1,
"Gender": 2,
"Soul": false,
"DeclType": 1,
"Plural": false,
"Suffix": "",
"Accent": true,
"RunVocal": false,
"Circle": false,
"Ring1": false,
"Ring2": false,
"Note": ""
},
{
"Wrd": "кааба",
"Sample": 1,
"Gender": 2,
"Soul": false,
"DeclType": 1,
"Plural": false,
"Suffix": "",
"Accent": false,
"RunVocal": false,
"Circle": false,
"Ring1": false,
"Ring2": false,
"Note": ""
},
{
"Wrd": "баба",
"Sample": 1,
"Gender": 2,
"Soul": false,
"DeclType": 1,
"Plural": false,
"Suffix": "",
"Accent": false,
"RunVocal": false,
"Circle": false,
"Ring1": false,
"Ring2": false,
"Note": ""
},
{
"Wrd": "баба",
"Sample": 1,
"Gender": 2,
"Soul": true,
"DeclType": 1,
"Plural": false,
"Suffix": "",
"Accent": false,
"RunVocal": false,
"Circle": false,
"Ring1": false,
"Ring2": false,
"Note": ""
}
],
"DateFinish": "28.01.2021 12:26:03:343"
}
Вот полный текст процедуры создания словаря:
Код:
procedure TGlossary.SaveToJSON(const AFileName: String);
var
SB: TStringBuilder;
fs: TFileStream;
SW: TStreamWriter;
JTW: TJsonTextWriter;
JOB: TJSONObjectBuilder;
// EntryJB: TJSONObjectBuilder;
i: Integer;
begin
fs := TFileStream.Create(AFileName, fmCreate);
SW := TStreamWriter.Create(fs); // есть конструктор с FileName
JTW := TJsonTextWriter.Create(SW);
JTW.Formatting := TJsonFormatting.None;
JOB := TJSONObjectBuilder.Create(JTW);
try
with JOB.BeginObject do begin
Add('DateCreation', FormatDateTime('dd.mm.yyyy hh:mm:ss:zzz', Now()));
with BeginArray('Words') do
begin
for i:=0 to 5 { Count - 1 } do begin
SB:=Items[i].EntryJSON;
{ Что тут написать?
Add(???...
AddElements(???...
}
end;
EndArray;
end;
Add('DateFinish', FormatDateTime('dd.mm.yyyy hh:mm:ss:zzz', Now()));
EndObject;
end;
finally
FreeAndNil(JOB);
FreeAndNil(JTW);
FreeAndNil(SW);
FreeAndNil(fs);
end;
end;
Что я должен написать в цикле? Может Items[i].EntryJSON должна возвращать какой-то другой объект?
|