定义:不同的地理信息系统或地理信息系统与其他信息系统之间履行数据双向交流时采取的数据格式
引自百度百科
据百度百科上的描述数据交流这个词最早是在《地理信息系统名词》第二版,很明显不是用来做编程的。在编程方面数据交流格式仅仅是一种格式,当前主流利用的格式有 3 种 : XML、JSON、YAML

既然是一种格式,那么它就须要标准,由于通过标准可以限定各个格式中的详细内容
XMLXML(全称EXtensible Markup Language),在我看来它是一种古老的数据交流格式,由于从我打仗到编程开始它就已经存在了
标准所在网址:https://www.w3.org/TR/1998/REC-xml-19980210
最新文档地址:https://www.w3.org/TR/REC-xml/
实在XML的标准一贯是1.0,至少我没有见过其他的,一样平常情形下我们在编写XML文档的时候都须要遵照一个约束文件,这个约束文件中规定了你可以编写的内容。约束文件存在的办法也有两种,原来是 DTD 格式现在主流的是 Schema
XML 如果想完全的学习还是比较费劲的,不过一样平常情形下哀求约束文档能看懂,XML内容会编写即可
参考网址:https://www.w3school.com.cn/x.asp
Delphi解析可利用 TXMLDocument(Delphi自带),此外也可以利用微软的 MSXML2 我没有这种需求以是并没有深入研究
官方文档:http://docwiki.embarcadero.com/Libraries/Sydney/en/Xml
JSONJSON(JavaScript Object Notation) 是一种轻量级的数据交流格式。比较于XML格式JSON更为大略明了
标准文档地址:http://www.json.org/json-zh.html
详细的语法规则可以参考上面网址的文档内容,中文的
Delphi官方(当前最新版本DelphiXE10.4.2)已经支持对付JSON的解析了,官方文档地址
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON
须要把稳的是有些类是Tokyo 10.2新增的,在利用的时候须要检讨一下自己的版本
YAMLYAML (全称YAML Ain’t Markup Language),YAML不是标记措辞的意思,YAML是便于人阅读基于unicode 编码的各种措辞的序列号标准。
YAML措辞的设计参考了JSON,XML和SDL等措辞。YAML 强调以数据为中央,简洁易读,编写大略
官网地址:http://yaml.org
一个让人头皮发麻的站点
学习的话可以参考 阮一峰 老师的博客内容,地址:https://www.ruanyifeng.com/blog/2016/07/yaml.html
没有找到官方支持,不过在GitHub上有一个开源库是支持Delphi解析YAML格式数据的,有兴趣的朋友可以去研究
地址:https://github.com/neslib/Neslib.Yaml
末了我想说我非常讨厌这种数据格式,和python一样依赖缩进和空格掌握语法。。。
JSON解析案例将原来视频中讲解的代码在DelphiXE10.4.2上进行了重构
uses System.JSON, System.Generics.Collections, System.JSON.Serializers, System.SysUtils;type { 实体类,紧张是用于JSON字符串和类工具的相互转换 } TStudent = class(TObject) private FName: string; FAge: Integer; public property Name: string read FName write FName; property Age: Integer read FAge write FAge; constructor Create; overload; constructor Create(FName: string; FAge: Integer); overload; end;constructor TStudent.Create;beginend;constructor TStudent.Create(FName: string; FAge: Integer);begin Self.FName := FName; Self.FAge := FAge;end;begin { 定义一个JSON字符串 } var UserJson := '{"FName":"小黑","FAge":18}'; { 创建序列化工具 } var Serializer := TJsonSerializer.Create(); { 反序列化,实在就将字符串转为工具 } var Student := Serializer.Deserialize<TStudent>(UserJson); Writeln('反序列化:' + Student.Name + ',' + Student.Age.ToString); { 列表转换,将TLIst容器转为字符串,也可以说是数组转换 } var List := TList<TStudent>.Create; List.Add(TStudent.Create('小白', 30)); List.Add(TStudent.Create('萧蔷', 30)); // 创建序列化工具 Serializer := TJsonSerializer.Create(); Writeln('序列化:' + Serializer.Serialize < TList < TStudent >> (List)); var { 一个比较繁芜的json字符串 } Users := '{"FListHelper":{"FCount":2},"FItems":[{"FName":"小白","FAge":30},{"FName":"萧蔷","FAge":30}],"FComparer":{}}'; // 创建序列化工具 Serializer := TJsonSerializer.Create(); { 可以考试测验下这里会不会有问题,当字段匹配时居然可以直接转换 } var UserList := Serializer.Deserialize < TList < TStudent >> (Users); for var Stu in UserList do begin Writeln('反序列化:' + Stu.Name + ',' + Stu.Age.ToString); end; { 获取指定字段 } Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONObject> ('FListHelper').GetValue<string>('FCount')); Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONArray>('FItems') .Count.ToString); Readln;end.
实在Delphi自带的JSON解析已经够用了,如果不能知足你的话有一个开源库你可以考试测验,不过我看它最近一次更新代码是 3 年前....
Github地址:https://github.com/hgourvest/superobject
学习资料(万一老师的博客):https://www.cnblogs.com/del/category/215158.html