Durante l'utilizzo del JSON Delphi Library si devono adottare il metodo che ho seguito ordine n per aggiungere elementi figlio JSON ai loro genitori:
function TlkJSONobject.Add(const aname: WideString; aobj: TlkJSONbase): Integer;
Il metodo permette il parametro aobj
di essere attaccato come un figlio di un elemento aname
.
Il codice di seguito permette di compiere il proprio compito:
var
js0, js1, js2, js22: TlkJSONobject;
s: string;
i: Integer;
begin
js2 := TlkJSONobject.Create;
js2.Add('time', '1600');
js2.Add('Points', 4);
js22 := TlkJSONobject.Create;
js22.Add('time', '1500');
js22.Add('Points', 3);
js1 := TlkJSONobject.Create;
js1.Add('test_user1', js2);
js1.Add('test_user2', js22);
js0 := TlkJSONobject.Create;
js0.Add('Users', js1);
i := 0;
s := GenerateReadableText(js0, i);
WriteLn(s);
js0.Free;
end;
Questo è un modo più adatto per scrivere il codice precedente - ma meno leggibile a mio parere.
L'idea qui è di creare gli elementi nell'ordine di parentela genitore-figlio naturale: i figli vengono aggiunti al genitore già inserito usando la proprietà Field
dell'oggetto TlkJSONobject
.
Si noti che js.Field['some string']
è lo stesso di js['some string']
a causa della direttiva default
applicata alla proprietà Field
.
var
js: TlkJSONobject;
s: string;
i: Integer;
begin
js := TlkJSONobject.Create;
try
js.Add('Users', TlkJSONobject.Create);
with TlkJSONobject(js['Users']) do begin
Add('test_user1', TlkJSONobject.Create);
Add('test_user2', TlkJSONobject.Create);
end;
with TlkJSONobject(TlkJSONobject(js['Users'])['test_user1']) do begin
Add('time', '1600');
Add('Points', 4);
end;
with TlkJSONobject(TlkJSONobject(js['Users'])['test_user2']) do begin
Add('time', '1500');
Add('Points', 3);
end;
i := 0;
s := GenerateReadableText(js, i);
WriteLn(s);
finally
js.Free;
end;
end;
esecuzione del progetto, esso stampa:
{
"Users":{
"test_user1":{
"time":"1600",
"Points":4
},
"test_user2":{
"time":"1500",
"Points":3
}
}
}
In un caso reale, che, ovviamente, prenderà in considerazione per creare gli oggetti e aggiungere i bambini che utilizzano una certa istruzione loop.
Cosa dice la documentazione? –
Potresti chiarire cosa vuoi che sia diverso nel tuo? Sono i dizionari nidificati? Inoltre, non hai una virgola dopo '" test_user1 ": {...}' di cui probabilmente avrai bisogno. – SuperBiasedMan