2015-10-06 32 views
5

sto usando lkJSON-1.07 in Delphi 7, nella loro esempioScrivere un testo JSON

js := TlkJSONobject.Create; 
js.Add('namestring','namevalue'); 
// get the text of object 
s := TlkJSON.GenerateText(js); 
    writeln(s); 
writeln; 
writeln('more readable variant:'); 
// (ver 1.03+) generate readable text 
i := 0; 
s := GenerateReadableText(js,i); 
writeln(s); 

js.Free; 

è generare un testo come questo: { "namestringa": "NameValue" }

Come faccio a scrivere un formato di testo jSON come questo:

{ 
    "Users": 
    { 
    "test_user1": 
    { 
     "time":1600, 
     "Points":4 
    } 
    "test_user2": 
    { 
     "time":1500, 
     "Points":3 
    } 
    } 
} 
+0

Cosa dice la documentazione? –

+0

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

risposta

3

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.