Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化

uses Data.FireDACJSONReflect

// C:\Program Files (x86)\Embarcadero\Studio\20.0\source\data\datasnap\Data.FireDACJSONReflect.pas

TFDJSONInterceptor = class(TJSONInterceptor)

public
    // Conversion utility methods
    class function ItemListToJSONObject(const AList: TItemList; const AJSONObject: TJSONObject): Boolean; static;
    class function DataSetsToJSONObject(const ADataSets: TFDJSONDataSetsBase; const AJSONObject: TJSONObject): Boolean; static;
    class function JSONObjectToItemList(const AJSONObject: TJSONObject; const AList: TItemList): Boolean; static;
    class function JSONObjectToDataSets(const AJSONObject: TJSONObject; const ADataSets: TFDJSONDataSetsBase): Boolean; static;
    destructor Destroy; override;
    // Reverter/Converter overrides
    function TypeObjectConverter(AData: TObject): TObject; override;
    function TypeObjectReverter(AData: TObject): TObject; override;
  end;

其中:ItemListToJSONObject

LJSONValue_ofDataSet := DataSetToJSONValue(LDataSet);   //: TJSONValue;

//:  function DataSetToJSONValue(const ADataSet: TFDAdaptedDataSet): TJSONValue;

->

S := DataSetToString(ADataSet);

//:  function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;

->

function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;
var
  LBinary64: string;
  LMemoryStream: TMemoryStream;
  LStringStream: TStringStream;
  LDstStream: TMemoryStream;
  Zipper: TZCompressionStream;
begin
  LDstStream := TMemoryStream.Create;
  try
    LMemoryStream := TMemoryStream.Create;
    try
      ADataSet.SaveToStream(LMemoryStream, TFDStorageFormat.sfBinary);
      LMemoryStream.Seek(0, TSeekOrigin.soBeginning);
      Zipper := TZCompressionStream.Create(clDefault, LDstStream);
      try
        Zipper.CopyFrom(LMemoryStream, LMemoryStream.Size);
      finally
        Zipper.Free;
      end;
    finally
      LMemoryStream.Free;
    end;
    LDstStream.Seek(0, TSeekOrigin.soBeginning);

LStringStream := TStringStream.Create;
    try
      TNetEncoding.Base64.Encode(LDstStream, LStringStream);
      LBinary64 := LStringStream.DataString;
    finally
      LStringStream.Free;
    end;
  finally
    LDstStream.Free;
  end;
  Result := LBinary64;
end;

Base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。采用Base64编码具有不可读性,需要Decode解码后才能阅读。https://baike.baidu.com/item/base64/8545775?fr=aladdin

// : 返回到客户端:类似这样的二进位Json即Bson数据的流化数据:

{
    "result": [
        {
            "CtL00001": "eJztvQuYHMdxGDyASIikKJKiXrRESifZlkEbim/37gBcHMc+3AHEQfci7vgAE2cyNzu7O8TuzmJm\r\n9g5Hx4/Ejh3n5diOHb/imJEoy9GDT/AFkBAtkhIBUqDFl2RZ+ajo8dlxojhO+MuhZfLv7umZ6e6p\r\n6pnduwFACuBH4G6qu6enuqq6qrq6amJq1+KlxugVp67fbLxqbDI2vbr51TecZ1xmGMakERozxjD/\r\nr2KcDz7dQjoZxhsN+ucCw7jQ+Jnf+E3jIuPH32sYr77p1YvPM84jANeoke7xT1GXS4w3G5eSlgYZ\r\ndtNbjE2XG5veamx6m7Hp7car5M872N/vNDZdYWz6HmPTu4xN7zY2XZmMcRXr+Qp9wTvID7ZhknlZ\r\nxrLRMhyjQ35qk3/P18C2GJvZJN5jvNfYmUyCvJ68coi98kpN76tYn/exv9kkrsg0XSLzDNlP52uh\r\nW4w3JBOZQiai638V6/U+9jebysVJ4zWjy16vPtnC0Bi9cjPySrXPVazl+9jf7DUX8QY9I2AvkX/f\r\nQp7kvULukXkBxf5+ArANz/DJkk+Sf3tkBUK+rjBsC/kvS1zZdYV7C2RFf7iR4DlGovz7Fkby0fdh\r\nr5F7REO/L33BB8gPM2RBA/JeupyUrkzjOtK4Rp6G5Lcp9q9FXl687RbKhWRi7ze+lxEWNLHio11l\r\nvJO0/T42Epv0D+Z2XSR/+wSdNluo/tpvIfIjb/L9jZj5gCGw+wLp4JEB4mkXabWFLaV+skXGyUyR\r\nLs+UMUs62qShw79qDyPWReMQ4XqXPRnhhFGs7RbjTQnF/o9LcMIoNtpVbIz3sb9feeXV73/l1Q+8\r\nazI6arD5vIu08AlWGmwNIszGFPAeiQKyWLyC4X6Cjeqy2ftslAbBSbyGl/P5iLQq01vc8j1stCne\r\nZonRjMNGpbPp0qs1pL3FVuodygjx8ytBOowp5zLjevKTQ3AaP7mEYNQTft/Cf7+I/0sp/TIJQ/Q9\r\nV7B1aLGZRpiI+1+p8OQ+Psuo3yUS7gPj/wcCWOAL"
        }
    ]
}

// :        \r\n

\n是换行,英文是New line。\r是回车,英文是Carriage return。

建议大家养成习惯,尽快调整以前的老代码,尽快直接使用成熟的中间件,比如:高勇的“三层中间件源码库”,处理起来系统性、稳定性、安全性、并发性能很好。

Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化相关推荐

  1. 「场景化」增长的践行者:探寻大数据时代的商业变革

    今日世界,产品与服务的可替代性日益显著,因此,企业必须知道并深入了解用户的期望与需求,这样才能赢得关键竞争优势.大数据分析可以将所有数据源集中起来,并提供获得用户数据的简易途径,之后便可对用户数据加以 ...

  2. The Pathologies of Big Data(大数据病理)

    论文目录 大数据病理(The Pathologies of Big Data) 处理大数据(Dealing with Big Data) 硬件限制(Hard Limits) 分布式计算作为大数据策略( ...

  3. 【华为云技术分享】大数据容器化,头部玩家尝到了甜头

    [摘要] 大数据容器化,大势所趋.头部玩家在进行大数据容器化后,尝到了甜头? 大数据的需求热度,从来都是这个时代的浪尖.然而由于大数据系统的复杂性,一度导致业界大数据已死的各种声音不断.尤其是当Map ...

  4. Greenplum助医疗大数据从“奢侈品”走向常态化

    增加医疗大数据平台的便捷功能服务,推动医疗大数据的常态化应用. 近年来,大数据产业发展如火如荼.不过,在医疗领域,医疗大数据平台在不少医院心目中还是曲高和寡的"奢侈品". 2019 ...

  5. 我国亟待建立全国危化品安全监管大数据平台

    天津港"8·12"瑞海公司危险品仓库特别重大火灾爆炸事故,人员伤亡惨重.经济损失巨大,引起社会广泛关注,我国危化品安全生产形势严峻且复杂,创新危化品安全监管方式,提升监管能力势在必 ...

  6. Spark(六):SparkSQLAndDataFrames对结构化数据集与非结构化数据的处理

    为什么80%的码农都做不了架构师?>>>    一:简单了解SparkSQL. Spark SQL 是结构化的数据处理一个Spark模块.与基本的Spark RDD API不同,Sp ...

  7. titanic数据集_TF2.0结构化数据建模流程范例

    尽管TensorFlow设计上足够灵活,可以用于进行各种复杂的数值计算.但通常人们使用TensorFlow来实现机器学习模型,尤其常用于实现神经网络模型. 从原理上说可以使用张量构建计算图来定义神经网 ...

  8. java 压缩字节流_java 压缩 字节流 ,C#解压的问题

    给现有的.Net项目增加安卓平台客户端, 目前使用的 ComponentAce.Compression.Libs.zlib 压缩解压字节流 C#代码片段: ... ZOutputStream outZ ...

  9. 【步兵 工具篇】lzma算法,压缩字节流

    [步兵 工具篇]lzma算法,压缩字节流 by EOS. 本来上周就打算写的,不过孩子连续高烧,住院了一个礼拜.一个礼拜没回家,还写什么博客. 虽然花了不少钱,好在孩子也恢复过来了,继续努力,挣钱养家 ...

最新文章

  1. uniapp自定义导航栏样式,自定义导航栏组件使用说明,兼容小程序和H5及各端
  2. 图灵四月书讯 ——经典与技术前沿的融合
  3. POJ 3461 还是两种方法
  4. AC日记——食物链 codevs 1047
  5. python PyQt5.QtWidgets.QWidget类
  6. 元胞自动机(Cellular Automata)
  7. 【开源项目】EasyCmd命令图形化软件
  8. 怎么查看父子级目录linux,如何查找linux中特定父目录的所有文件?
  9. 编写10ms延时的子程序c语言,求解!!!用汇编语言编写延时程序问题!!!!...
  10. 如何让大数据分析更有效
  11. 小程序影藏溢出的gif_Win10即将推出GIF录制编辑工具,不再需要第三方软件了
  12. UVA515 King
  13. 据说是学习python最全的资料
  14. C语言学生成绩管理系统(综合项目)
  15. osg学习(四十五)有关倾斜摄影的osgb、gltf、3DTiles格式
  16. win7网上邻居_win7系统网上邻居在哪
  17. IMO A.688(16) 寝具用品点燃性测试
  18. python怎么批量读取文件_python如何批量读取txt文件
  19. Java队列的poll,peek,element的区别
  20. 孟婆汤传说!!!感人至极!

热门文章

  1. NIPS 2016精华大盘点丨吴恩达、LeCun等大师的论文、PPT都在这儿,别劳心去找了...
  2. 高通首席财务官Davis离职 转投竞争对手英特尔门下
  3. ARP攻击、欺骗及防御
  4. 一个公司亏损 20 年,却估值超 2 万亿,为什么?
  5. 建筑公司劳务费用,材料费用缺少票怎么解决
  6. PHP编程基础实验二之php基础语法编程(四)
  7. 通信原理包络是什么意思_为什么齿轮不能少于17个齿数?
  8. FZU - 2230 翻翻棋
  9. Linux错误代码及其含义
  10. AirPods3丢失怎么找