我在delphi 7中使用lkJSON-1.07,在他们的例子中
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;
它会生成如下文本: { " namestring":" namevalue" }
如何编写像这样的json文本格式:
{
"Users":
{
"test_user1":
{
"time":1600,
"Points":4
}
"test_user2":
{
"time":1500,
"Points":3
}
}
}
答案 0 :(得分:3)
在使用JSON Delphi Library时,您必须采用以下方法才能将子JSON元素添加到其父级:
function TlkJSONobject.Add(const aname: WideString; aobj: TlkJSONbase): Integer;
该方法允许aobj
参数作为aname
元素的子项附加。
以下代码可以完成您的任务:
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;
这是编写前面代码的更合适的方法 - 但在我看来可读性较差。
这里的想法是以自然的父子关系顺序创建元素:使用Field
对象的TlkJSONobject
属性将子元素添加到已插入的父元素中。
请注意js.Field['some string']
与js['some string']
相同,因为default
指令已应用于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;
运行项目,打印:
{
"Users":{
"test_user1":{
"time":"1600",
"Points":4
},
"test_user2":{
"time":"1500",
"Points":3
}
}
}
在一个实际案例中,你显然会考虑创建对象并使用一些循环指令附加子对象。