链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() 轻车熟路的感觉,让人觉得,哇!好帅的写法,牛x。
以前以为只有 TJSONBuilder 才支持链式语法,今天发现 TJSONObject 也支持,比如要生成下面的 JSON
{ "name": "张三","vip": true,"telephones": [ "13012345678","19786543210" ],"age": 24,"size": 1.72,"adresses": [ { "adress": "foo","city": "The wall","pc": 57000 },{ "adress": "foo","city": "Winterfell","pc": 44000 } ] }
使用 TJSONObject 链式写法,代码如下:
with TJSONObject.Create do try AddPair(‘name‘,‘张三‘) .AddPair(‘vip‘,TJSONTrue.Create) .AddPair(‘telephones‘,TJSONArray.Create .Add(‘13012345678‘) .Add(‘19786543210‘) ) .AddPair(‘age‘,TJSONNumber.Create(24)) .AddPair(‘size‘,TJSONNumber.Create(1.72)) .AddPair(‘adresses‘,TJSONArray.Create .Add( TJSONObject.Create .AddPair(‘adress‘,‘foo‘) .AddPair(‘city‘,‘The wall‘) .AddPair(‘pc‘,TJSONNumber.Create(57000)) ) .Add( TJSONObject.Create .AddPair(‘adress‘,‘Winterfell‘) .AddPair(‘pc‘,TJSONNumber.Create(44000)) ) ); Memo1.Text := TConverters.JsonReformat(ToJSON); finally Free; end;
Delphi 10.1 新增的一个JSON读写框架 :Readers and Writers JSON Framework ,可以了解下:
Builder:=TJSONObjectBuilderEx.NewBuilder; Builder .Beginobject .Add(‘name‘,‘张三‘) .Add(‘vip‘,true) .BeginArray(‘telephones‘) .Add(‘13012345678‘) .Add(‘19786543210‘) .Endarray .Add(‘age‘,24) .Add(‘size‘,1.72) .BeginArray(‘adresses‘) .Beginobject .Add(‘adress‘,‘foo‘) .Add(‘city‘,‘The wall‘) .Add(‘pc‘,57000) .Endobject .Beginobject .Add(‘adress‘,‘Winterfell‘) .Add(‘pc‘,44000) .Endobject .Endarray .Endobject; Memo1.Text := Builder.ToJSON;
不过,看起来,使用 TJSONBuilder 层次更分明,更优雅。