Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写json文本_Json_Delphi_Delphi 7 - Fatal编程技术网

编写json文本

编写json文本,json,delphi,delphi-7,Json,Delphi,Delphi 7,在他们的示例中,我在Delphi7中使用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 :

在他们的示例中,我在Delphi7中使用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;
它生成如下文本: { “名称字符串”:“名称值” }

如何编写json文本格式,如下所示:

{
“用户”:
{
“测试用户1”:
{
“时间”:1600,
“点数”:4
}
“测试用户2”:
{
“时间”:1500,
“点数”:3
}
}
}
在使用时,必须采用以下方法将子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
对象的
字段
属性将子元素添加到已插入的父元素中

请注意,
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;

运行项目时,它会打印:

{
“用户”:{
“测试用户1”:{
“时间”:“1600”,
“点数”:4
},
“测试用户2”:{
“时间”:“1500”,
“点数”:3
}
}
}


在一个真实的情况下,你显然会考虑创建对象并使用一些循环指令来追加孩子。

文档说明了什么?你能解释一下你想要什么不同的东西吗?是嵌套字典吗?另外,在
“test_user1”:{…}
之后没有逗号,这是您可能需要的。