写 json 篇文字
Write a json text
我在 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
}
}
}
在使用 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;
这是一种更适合编写先前代码的方式 - 但在我看来可读性较差。
这里的想法是以自然的父子关系顺序创建元素:使用 TlkJSONobject
的 Field
属性 将子元素添加到已插入的父元素中对象。
请注意 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
}
}
}
在实际情况下,您显然会考虑创建对象并使用一些循环指令追加子项。
我在 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
}
}
}
在使用 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;
这是一种更适合编写先前代码的方式 - 但在我看来可读性较差。
这里的想法是以自然的父子关系顺序创建元素:使用 TlkJSONobject
的 Field
属性 将子元素添加到已插入的父元素中对象。
请注意 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
}
}
}
在实际情况下,您显然会考虑创建对象并使用一些循环指令追加子项。