链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() 轻车熟路的感觉,让人觉得,哇!好帅的写法,牛x。
以前以为只有 TJSONBuilder 才支持链式语法,今天发现 TJSONObject 也支持,比如要生成下面的 JSON
1{ 2 "name": "张三", 3 "vip": true, 4 "telephones": [ 5 "13012345678", 6 "19786543210" 7 ], 8 "age": 24, 9 "size": 1.72, 10 "adresses": [ 11 { 12 "adress": "foo", 13 "city": "The wall", 14 "pc": 57000 15 }, 16 { 17 "adress": "foo", 18 "city": "Winterfell", 19 "pc": 44000 20 } 21 ] 22}
使用 TJSONObject 链式写法,代码如下:
1var 2 JsonObject:TJSONObject; 3begin 4 JsonObject:= TJSONObject.Create; 5 6 JsonObject 7 .AddPair('name', TJSONString.Create('张三')) 8 .AddPair('vip', TJSONTrue.Create) 9 .AddPair('telephones', 10 TJSONArray.Create 11 .Add('13012345678') 12 .Add('19786543210') 13 ) 14 .AddPair('age', TJSONNumber.Create(24)) 15 .AddPair('size', TJSONNumber.Create(1.72)) 16 .AddPair('adresses', 17 TJSONArray.Create 18 .Add( 19 TJSONObject.Create 20 .AddPair('adress', 'foo') 21 .AddPair('city', 'The wall') 22 .AddPair('pc', TJSONNumber.Create(57000)) 23 ) 24 .Add( 25 TJSONObject.Create 26 .AddPair('adress', 'foo') 27 .AddPair('city', 'Winterfell') 28 .AddPair('pc', TJSONNumber.Create(44000)) 29 ) 30 ); 31 32 Memo1.Text := TConverters.JsonReformat(JsonObject.ToJSON); 33 34end;
Delphi 10.1 新增的一个JSON读写框架 :Readers and Writers JSON Framework ,可以了解下:
1Builder:=TJSONObjectBuilderEx.NewBuilder; 2Builder 3 .BeginObject 4 .Add('name','张三') 5 .Add('vip',true) 6 .BeginArray('telephones') 7 .Add('13012345678') 8 .Add('19786543210') 9 .EndArray 10 .Add('age',24) 11 .Add('size',1.72) 12 .BeginArray('adresses') 13 .BeginObject 14 .Add('adress','foo') 15 .Add('city','The wall') 16 .Add('pc',57000) 17 .EndObject 18 .BeginObject 19 .Add('adress','foo') 20 .Add('city','Winterfell') 21 .Add('pc',44000) 22 .EndObject 23 .EndArray 24 .EndObject; 25Memo1.Text := Builder.ToJSON;
不过,看起来,使用 TJSONBuilder 层次更分明,更优雅。
