链式写法有很多优点:连贯、语意集中、简洁、一气呵成、可读性强。比如要把 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('')
.Add('')
)
.AddPair('age', TJSONNumber.Create())
.AddPair('size', TJSONNumber.Create(1.72))
.AddPair('adresses',
TJSONArray.Create
.Add(
TJSONObject.Create
.AddPair('adress', 'foo')
.AddPair('city', 'The wall')
.AddPair('pc', TJSONNumber.Create())
)
.Add(
TJSONObject.Create
.AddPair('adress', 'foo')
.AddPair('city', 'Winterfell')
.AddPair('pc', TJSONNumber.Create())
)
); 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('')
.Add('')
.EndArray
.Add('age',)
.Add('size',1.72)
.BeginArray('adresses')
.BeginObject
.Add('adress','foo')
.Add('city','The wall')
.Add('pc',)
.EndObject
.BeginObject
.Add('adress','foo')
.Add('city','Winterfell')
.Add('pc',)
.EndObject
.EndArray
.EndObject;
Memo1.Text := Builder.ToJSON;

不过,看起来,使用 TJSONBuilder 层次更分明,更优雅。

Delphi Sysem.JSON 链式写法(转全能中间件)的更多相关文章

  1. Delphi Sysem.JSON 链式写法

    链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...

  2. JQuery事件的链式写法

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. jquery事件链式写法

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. ajax操作的链式写法

    ajax操作的传统写法: $.ajax({ url: url, success: function(){ doWhenSuccess(); }, error: function(){ doWhenEr ...

  5. Jquery | 基础 | 事件的链式写法

    $(".title").click(function () { $(this).addClass("curcol").next(".content&q ...

  6. Java 链式写法

    Java链式写法,子类继承父类的属性,也可以返回子类的对象,只是需要重写基类的Set方法 public class MyLS { public static void main(String[] ar ...

  7. Java链式写法

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11613067.html Java 链式写法:详细看代码 package chain; /** ...

  8. javascript 链式写法

    熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量. 链式的实现方式:链式操作是在对象的方法中通过最后返回 ...

  9. async await 的使用。 其实就是和then一样,只不过改变了链式写法

    这样写显得更加舒服.

随机推荐

  1. 【druid 】数据库连接池

    一.数据库连接池架构 二.数据库连接池的过滤器 spi的思想,加载配置文件的Filter druid.filters.default=com.alibaba.druid.filter.stat.Sta ...

  2. 定时任务模块 schedule

    # coding:utf-8 from learning_python.Telegram_push.check_hardware import check_cpu import schedule im ...

  3. vue 将毫秒转为日期

    12345656546 | parseTime('{y}-{m}-{d} {h}:{i}')

  4. 解决WIN7第一次开机冷启动QQ未响应的办法

    为什么WIN7第一次开机冷启动QQ未响应?WIN10就没事? http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409516&extr ...

  5. RAMOS和SSD对比

    http://bbs.pcbeta.com/forum.php?mod=redirect&goto=findpost&ptid=1786284&pid=48341400RAMO ...

  6. JAVA Override和Overload的含义去区别

    java中的继承,方法覆盖(重写)override与方法的重载overload的区别 1.方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,重写(Overr ...

  7. 学习笔记之X分钟速成Python3

    X分钟速成Python3 https://mp.weixin.qq.com/s/QT5sR0nUKgJYsYgrj2SleA https://learnxinyminutes.com/docs/zh- ...

  8. windows环境下ElasticSearch6 安装head插件

    转: https://blog.csdn.net/shubingzhuoxue/article/details/80998738 https://blog.csdn.net/camelcanoe/ar ...

  9. 4、hello world

    package com.ourteam.firstexample; import io.netty.bootstrap.ServerBootstrap;import io.netty.channel. ...

  10. text_CNN笔记

    Text-CNN模型作为文本分类模型,通过验证实验以及业界的共识,在文本分类任务中,CNN模型已经能够取到比较好的结果,虽然在某些数据集上效果可能会比RNN稍差一点,但是CNN模型训练的效率更高.所以 ...