加载中…
个人资料
红鱼儿
红鱼儿
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,320,200
  • 关注人气:241
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

DelphiSysem.JSON链式写法

(2018-06-19 07:11:17)
标签:

delphi

分类: Delphi10.2
    链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 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 有兴趣可以了解下,下面是使用 TJSONObjectBuilder 的写法:

Builder:=TJSONObjectBuilder.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 层次更分明,更优雅。 此帖子包含附件:
PNG 图像

还可以插入控制语句,速度超级快。
  with Builder.BeginObject do
  begin
    Add('name', '张三') ;
    Add('vip', true);
    with BeginArray('telephones') do
    begin
      for var I:=0 to do
        Add('13012345678');
      EndArray;
    end;
    Add('age', 24) ;
    Add('size', 1.72) ;
    with BeginArray('adresses') do
    begin
      for var I:= to do
      begin
        with BeginObject do
        begin
          Add('adress', 'foo') ;
          Add('city', '合肥');
          Add('pc', 57000);
          EndObject;
        end;
      end;
      EndArray;
    end;
    EndObject;
  end;
  Memo1.Text := Builder.ToJSON;

Delphi 10.3 的 Json 有格式化功能了,JsonObject.Format。

这是原文地址,感谢全能中间件作者。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有