zoukankan      html  css  js  c++  java
  • Delphi Sysem.JSON 链式写法(转全能中间件)

     链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 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 层次更分明,更优雅。

  • 相关阅读:
    强迫症
    bzoj1758 [Wc2010]重建计划
    bzoj1070 [SCOI2007]修车
    bzoj3675 [Apio2014]序列分割
    bzoj1010 [HNOI2008]玩具装箱toy
    bzoj3697 采药人的路径
    bzoj2152 聪聪可可
    bzoj2599 [IOI2011]Race
    Ubuntu 18.04 LTS 下 GTK3 安装与编译
    启动或重启 dnsmasq 提示端口 53 被占用的解决方案
  • 原文地址:https://www.cnblogs.com/Thenext/p/10651399.html
Copyright © 2011-2022 走看看