1. 程式人生 > >Delphi Sysem.JSON 鏈式寫法

Delphi Sysem.JSON 鏈式寫法

tex 可讀性 bubuko 技術分享 splay png 框架 ram The

鏈式寫法有很多優點:連貫、語意集中、簡潔、一氣呵成、可讀性強。比如要把 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讀寫框架 :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,foo)
        .Add(city,Winterfell)
        .Add(pc,44000)
      .EndObject
    .EndArray
  .EndObject;
Memo1.Text := Builder.ToJSON;

不過,看起來,使用 TJSONBuilder 層次更分明,更優雅。

技術分享圖片

Delphi Sysem.JSON 鏈式寫法