2015-10-06 5 views
5

I lkJSON-1.07 in delphi 7, in ihrem Beispielschreiben json Text

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; 

es erzeugt einen Text wie dieser bin mit: { "namestring": "Namevalue" }

Wie kann ich ein json Textformat wie diese schreiben:

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

Was sagt die Dokumentation? –

+0

Können Sie klarstellen, was Sie anders in Ihrem wollen? Sind es die verschachtelten Wörterbücher? Außerdem haben Sie kein Komma nach '" test_user1 ": {...}' welches Sie wahrscheinlich benötigen. – SuperBiasedMan

Antwort

3

Während der Verwendung von JSON Delphi Library müssen Sie die Methode anwenden, die mich folgt n um Kind JSON Elemente zu ihren Eltern hinzuzufügen:

function TlkJSONobject.Add(const aname: WideString; aobj: TlkJSONbase): Integer; 

Das Verfahren erlaubt die aobj Parameter als Kind eines aname Element befestigt werden.

Der folgende Code ermöglicht es Ihre Aufgabe zu erfüllen:

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; 

Dies ist ein geeigneter Weg, um den vorherigen Code zu schreiben - aber weniger lesbar meiner Meinung nach.

Die Idee dabei ist, die Elemente in der natürlich Eltern-Kind-Beziehung zu schaffen: die Kinder zu den bereits eingesetzt Eltern hinzugefügt, um die Field Eigenschaft des Objekts TlkJSONobject verwenden.

Bitte beachten Sie, dass dasselbe ist wie js['some string'] wegen der default Richtlinie, die auf die Field Eigenschaft angewendet wird.

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; 

das Projekt einsetzen, druckt:

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

In einem realen Fall, Sie werden natürlich die Objekte erstellen betrachten und hängen Sie die Kinder einige Schleifenanweisung verwenden.