链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 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 链式写法,代码如下:
var JsonObject:TJSONObject;begin JsonObject:= TJSONObject.Create; JsonObject .AddPair('name', TJSONString.Create('张三')) .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', 'foo') .AddPair('city', 'Winterfell') .AddPair('pc', TJSONNumber.Create(44000)) ) ); Memo1.Text := TConverters.JsonReformat(JsonObject.ToJSON);end;
Delphi 10.1 新增的一个JSON读写框架 : ,可以了解下:
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','foo') .Add('city','Winterfell') .Add('pc',44000) .EndObject .EndArray .EndObject;Memo1.Text := Builder.ToJSON;
不过,看起来,使用 TJSONBuilder 层次更分明,更优雅。