Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
方描述
Unit that implements generic container classes to group data items in arrays, dictionaries, lists, stacks, queues, and more.
譯文:實(shí)現(xiàn)泛型容器類(lèi)的單元,以在數(shù)組中對(duì)數(shù)據(jù)項(xiàng)進(jìn)行分組,詞典,列表,堆棧,隊(duì)列等。
起初在接觸到Delphi的時(shí)候我以為沒(méi)有這一部分內(nèi)容,所有的都要自己實(shí)現(xiàn),此處請(qǐng)?jiān)徫业臒o(wú)知。。。。
關(guān)于從那個(gè)版本開(kāi)始支持泛型的,我在官方文檔上沒(méi)有找到對(duì)應(yīng)的說(shuō)明,也可能是我英語(yǔ)太菜,在官網(wǎng)迷路了。
根據(jù)百度得來(lái)的結(jié)果2007的版本沒(méi)有(真百度的)支持2009的版本(萬(wàn)一老師的博客上引用的也是這個(gè)版本)開(kāi)始出現(xiàn),也就是最早支持泛型容器的版本應(yīng)該是Delphi2009
聊泛型容器避不開(kāi)的就是泛型的概念,之前看嗶哩嗶哩的網(wǎng)友留言從泛型一節(jié)就是開(kāi)始懵逼了。其實(shí)大可不必,泛型可以理解為一個(gè)變量,它的值是一個(gè)具體的類(lèi)型
嗯,其實(shí)也可以把它當(dāng)作孫大圣,它可以變成任何東西
在這個(gè)單元內(nèi)一共定義了13個(gè)容器類(lèi),我們?cè)谄渲猩踔量梢钥吹骄€程隊(duì)列。那么問(wèn)題來(lái)了,我們需要精通或者學(xué)習(xí)所有的類(lèi)嗎?答案是否定的
容器類(lèi)就我個(gè)人的理解其實(shí)一共有兩大表現(xiàn)形式,一種是列表形式的像數(shù)組,而另一種形式則以 Key,Value 成對(duì)的形式。也就是說(shuō)我們從中選擇兩個(gè)比較有代表性的類(lèi)進(jìn)行學(xué)習(xí)即可。下面是我選擇的兩個(gè)類(lèi)
注意:在單元內(nèi)我們還可以看到相似的類(lèi)例如 System.Generics.Collections.TObjectList<T> 和 System.Generics.Collections.TList<T>區(qū)別在于帶有Object的類(lèi)會(huì)在刪除元素時(shí)釋放對(duì)象,而沒(méi)有帶Object的不會(huì)釋放
針對(duì)容器類(lèi)學(xué)習(xí)的總原則是圍繞增、刪、改、查這幾個(gè)核心的API功能即可,其他的就只能現(xiàn)用現(xiàn)查了,不知道別人寫(xiě)代碼是什么習(xí)慣,我寫(xiě)代碼的時(shí)候幫助文檔基本上都是開(kāi)著的。。。
下面是針對(duì)兩個(gè)容器類(lèi)的代碼實(shí)現(xiàn)
實(shí)體類(lèi)(TStudent)代碼
type
TStudent=class
private
FName: string;
public
property Name: string read FName write FName;
// 構(gòu)造方法
constructor Create; overload;
// 有參構(gòu)造方法
constructor Create(FName: string); overload;
end;
constructor TStudent.Create;
begin
end;
constructor TStudent.Create(FName: string);
begin
Self.FName :=FName;
end;
操作類(lèi)(即增、刪、改、查),我沒(méi)有使用內(nèi)聯(lián),幾次想用都刪了
uses
System.Generics.Collections, System.SysUtils;
var
// 文檔上的定義是TList<T>,而我們的定義尖括號(hào)中的是TStudent,這就是泛型的用法
StudentList: TList<TStudent>;
// 循環(huán)中使用獲取TList成員
Stu: TStudent;
begin
// 初始化學(xué)生列表
StudentList :=TList<TStudent>.Create;
StudentList.add(TStudent.Create('小強(qiáng)'));
StudentList.add(TStudent.Create('蕭薔'));
StudentList.add(TStudent.Create('小黑'));
StudentList.add(TStudent.Create('小白'));
StudentList.add(TStudent.Create('小黃'));
// 開(kāi)始之前輸出一次
for Stu in StudentList do begin
Writeln('學(xué)生信息是:' + Stu.Name);
end;
// 泛型容器自帶的刪除函數(shù),偷個(gè)懶
StudentList.Delete(0);
// 修改,查詢(xún)到指定的學(xué)生,修改其值即可
StudentList.Items[0].Name :='小白';
// 查詢(xún),其實(shí)和數(shù)組的操作沒(méi)有太大區(qū)別
for Stu in StudentList do begin
Writeln('學(xué)生信息是:' + Stu.Name);
end;
end.
此類(lèi)容器的特點(diǎn)是 key 唯一,并且?guī)缀跛械牟僮鞫际歉鶕?jù) key 來(lái)的
改造下實(shí)體類(lèi)(TStudent)增加一個(gè)屬性,代碼如下
type
TStudent=class
private
FName: string;
FId: string;
public
property Name: string read FName write FName;
property Id: string read FId write FId;
// 構(gòu)造方法
constructor Create; overload;
// 有參構(gòu)造方法
constructor Create(FName: string; FId: string); overload;
end;
constructor TStudent.Create;
begin
end;
constructor TStudent.Create(FName: string; FId: string);
begin
Self.FName :=FName;
end;
操作類(lèi)(即增、刪、改、查)
{注意單元的引用}
uses
System.Generics.Collections, System.SysUtils;
var
// 文檔上的定義是TList<T>,而我們的定義尖括號(hào)中的是TStudent,這就是泛型的用法
StudentMap: TDictionary<string, TStudent>;
// 循環(huán)中使用獲取TList成員
Key: string;
Student,Stu: TStudent;
begin
// 初始化學(xué)生列表
StudentMap :=TDictionary<string, TStudent>.Create;
// 此處的添加其實(shí)并不是太好,根據(jù)文檔描述,當(dāng)我們添加的元素的key已經(jīng)存在會(huì)拋出異常
// 建議使用AddOrSetValue
StudentMap.add('1001', TStudent.Create('1002', '小強(qiáng)'));
StudentMap.add('1002', TStudent.Create('1001', '蕭薔'));
StudentMap.add('1003', TStudent.Create('1003', '小黑'));
StudentMap.add('1004', TStudent.Create('1004', '小白'));
StudentMap.add('1005', TStudent.Create('1004', '小黃'));
// 注意此處獲取是key,也就是1001 1002這些東西
for Key in StudentMap.Keys do begin
// 獲取到key之后,再根據(jù)key獲取對(duì)應(yīng)value也就是學(xué)生對(duì)象
// 這里的獲取方式有點(diǎn)兒任性居然要的是一個(gè)指針,而不是直接返回
StudentMap.TryGetValue(Key, Student);
// 最好判斷一下,否則容易出現(xiàn)空指針
if (Student <> nil) then
Writeln('學(xué)生信息是:' + Student.Name)
end;
// 刪除元素,無(wú)論什么操作都是通過(guò)key去操作,因?yàn)閗ey是不可以重復(fù)的
StudentMap.Remove('1005');
// 修改,沒(méi)有就添加,有就更新
StudentMap.AddOrSetValue('1004', TStudent.Create('1004', '小黃'));
// 直接獲取value
for Stu in StudentMap.values do begin
// 最好判斷一下,否則容易出現(xiàn)空指針
if (Stu <> nil) then
Writeln('學(xué)生信息是:' + Student.Name)
end;
end.
萬(wàn)一的博客:https://www.cnblogs.com/del/category/113556.html
官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Generics.Collections
ttp://www.gotapi.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查詢(xún)網(wǎng)站。
http://www.w3schools.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:W3C制定的標(biāo)準(zhǔn)諸如XML,HTML,XSL等等的在線學(xué)習(xí)教程。
http://www.xml.org.cn/
語(yǔ)言:中文
簡(jiǎn)介:可以說(shuō)是XML的中國(guó)官方網(wǎng)吧。W3C標(biāo)準(zhǔn)的翻譯組織與XML系列技術(shù)交流社區(qū).
http://www.connectionstrings.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:這里幾乎收集了所有的數(shù)據(jù)庫(kù)連接字符(connectionstring)了。
http://www.itpub.net/
語(yǔ)言:中文
簡(jiǎn)介:我個(gè)人認(rèn)為是國(guó)內(nèi)最專(zhuān)業(yè)的綜合性行業(yè)性技術(shù)類(lèi)社區(qū).
http://www.netvtm.com/
語(yǔ)言:中文
簡(jiǎn)介:內(nèi)容多翻譯于w3schools.com,少有原創(chuàng)。不過(guò)還是應(yīng)該鼓勵(lì)精品翻譯。
http://www.regexlib.com
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:正則表達(dá)式庫(kù)。搜索正則表達(dá)式用。
http://www.rexv.org/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:用Ajax開(kāi)發(fā)的在線正則表達(dá)式驗(yàn)證器.
http://www.koders.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:代碼搜索引擎,可以搜索幾十種語(yǔ)言的代碼。
http://www.123aspx.com/Rotor/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:.Net Frameworks的源代碼。
語(yǔ)言:中文
簡(jiǎn)介:孟憲會(huì)的資料站,雖資料大多比較簡(jiǎn)單,卻解決了開(kāi)發(fā)中的大部分問(wèn)題?!
http://www.dofactory.com/Patterns/Patterns.aspx
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:23種設(shè)計(jì)模式的實(shí)現(xiàn)參考。特點(diǎn)是UML+精練的示例代碼+簡(jiǎn)潔的解說(shuō)風(fēng)格。
http://www.open-open.com/
語(yǔ)言:中文
簡(jiǎn)介:Java開(kāi)源大全,如果你用.NET,照著它的名字前加N找找應(yīng)該都有吧 ?!:)
http://www.riacn.com/
語(yǔ)言:中文
簡(jiǎn)介:我認(rèn)為是國(guó)內(nèi)少有的RIA專(zhuān)業(yè)技術(shù)站于交流社區(qū).
http://www.cnpaf.net/
語(yǔ)言:中文
簡(jiǎn)介:中國(guó)協(xié)議分析網(wǎng),很全面的協(xié)議資料網(wǎng)。
http://www.pinvoke.net/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:通過(guò).net調(diào)用win32等非受控API的資料大全。
http://bbs.51js.com/
語(yǔ)言:中文
簡(jiǎn)介:無(wú)憂(yōu)腳本,專(zhuān)業(yè)的腳本技術(shù)社區(qū)。
http://www.c-sharpcorner.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:C# Corner,學(xué)習(xí)c#的好地方.
http://blog.csdn.net/group/experts/
語(yǔ)言:中文
簡(jiǎn)介:CSDN專(zhuān)家群,匯集CSDN專(zhuān)家的電子報(bào).
http://www.codeproject.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:有很多可學(xué)習(xí)的示例代碼,特點(diǎn)是豐富,深入淺出.
http://www.gotdotnet.com/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:微軟開(kāi)發(fā)維護(hù)的關(guān)于.net framework交流社區(qū).
http://www.sourceforge.net/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:全球最大的開(kāi)源軟體站點(diǎn)
http://www.asp.net/QuickStart/
語(yǔ)言:英語(yǔ)
簡(jiǎn)介:Microsoft .NET Framework SDK QuickStart Tutorials
http://www.matrix.org.cn/
語(yǔ)言:中文
簡(jiǎn)介:與 Java 共舞,Java優(yōu)秀的專(zhuān)業(yè)社區(qū),文章質(zhì)量很高.做.Net的朋友也可以從其借鑒很多知識(shí).
JAVA學(xué)習(xí)模板——學(xué)習(xí)流程
http://www.7zcn.com/javastep/StudyJavaInfo.html
SUN中國(guó)技術(shù)社區(qū)
http://developers.sun.com.cn/
綜合網(wǎng)站 -
數(shù)動(dòng)在線http://www.shudoo.com/(電腦報(bào)) -http://www.csdn.net/ -
比特網(wǎng)IT知識(shí)庫(kù)http://know.chinabyte.com/index.php/%E9%A6%96%E9%A1%B5 -
至頂網(wǎng)http://www.zdnet.com.cn/ -
計(jì)世網(wǎng)http://www.ccw.com.cn/ -
中國(guó)IT實(shí)驗(yàn)室http://www.chinaitlab.com/ -
天極網(wǎng)http://www.yesky.com/ -
賽迪網(wǎng)http://www.ccidnet.com/ -
全球流量查詢(xún)http://www.alexa.com/ -
Java網(wǎng)站 -
Java軟件社區(qū)http://www.javaeye.com/ -
java世紀(jì)網(wǎng)http://www.java2000.net/ -
JAVABUGShttp://bugs.sun.com/JAVA漏洞 -
http://www.mldnjava.cn/java.htm -
HEY JAVA技術(shù)社區(qū)http://www.heyjava.com/ -
ACCP教程網(wǎng)http://www.accptech.com/index.html
論壇網(wǎng)站 -
美河論壇http://www.eimhe.com/bbs/ -
魔http://bbs.mldn.cn/ -
http://bbs.chinajavaworld.com/index.jspa
技術(shù)網(wǎng)站 -
apache的ANThttp://ant.apache.org/bindownload.cgi -
IBM http://www.ibm.com/developerworks/-
IDE-
Eclipse官網(wǎng)http://www.eclipse.org/downloads-
MyEclipse官網(wǎng)http://www.myeclipseide.com/
軟件測(cè)試
軟件測(cè)試網(wǎng)http://www.51testing.com/
1 程序員論壇:http://www.gxcxy.com
2 J2me社區(qū) http://www.j2meforums.com/forum/
3 csdn http://www.csdn.net/
4 Vc知識(shí)庫(kù) http://www.vckbase.com/
5 codeproject http://www.codeproject.com/
6 程序員聯(lián)合開(kāi)發(fā)網(wǎng) http://www.pudn.com/
7 看雪學(xué)院 http://www.pediy.com
8 藍(lán)色理想 http://www.blueidea.com/
9 博客園 http://www.cnblogs.com/
10 Nuix應(yīng)用開(kāi)發(fā)社區(qū) http://chinaunix.net/
11 javaeye http://www.javaeye.com
12 It人網(wǎng) http://www.iteer.net/
13 中國(guó)人才熱線 http://www.cjol.com/
14 天涯論壇 http://www.tianya.cn/
15 風(fēng)云的blog http://blog.codingnow.com/
16 新浪科技頻道 http://tech.sina.com.cn/
17 phpchina http://www.phpchina.com/html/index.html
18 游戲開(kāi)發(fā)資源網(wǎng) http://www.gameres.com/
19 網(wǎng)絡(luò)游戲第一門(mén)戶(hù) http://www.17173.com/
20 我愛(ài)研發(fā)網(wǎng) http://www.52rd.com/
21 Msdn中文網(wǎng) http://www.microsoft.com/china/MSDN/DeveloperCenter/default.mspx
22 大富翁編程網(wǎng)站 http://www.delphibbs.com/
23 Delphi盒子 http://www.2ccc.com/
24 C++buillder研究 http://www.ccrun.com/
25 It論壇 http://bbs.itren.cn/
26 Java開(kāi)源大全 http://www.open-open.com/
27 codegurn http://www.codeguru.com/
28 編程愛(ài)好者 http://www.programfan.com/
29 Java中文站 http://www.java-cn.com/
30 reactos http://www.reactos.org/zh/index.htm
31 開(kāi)源力量 http://www.opensourceforce.org/
32 電腦編程技巧與維護(hù) http://www.comprg.com.cn/
33 中國(guó)電子網(wǎng) http://21ic.com/
34 編程中國(guó) http://www.bc-cn.net/
35 嵌入式開(kāi)發(fā)論壇 http://www.cevx.com/bbs/
36 電腦愛(ài)好者 http://www.cfan.com.cn/
37 sybase中國(guó) http://www.sybase.com.cn/gvswse/site/china/index.jsp
38 pbdr http://www.pbdr.com/
39 apache http://www.apache.org
40 rootkit http://www.rootkit.com/index.php
41 驅(qū)動(dòng)開(kāi)發(fā)網(wǎng) http://www.driverdevelop.com/first.html
42 安全焦點(diǎn) http://www.xfocus.net/
43 cnbeta網(wǎng)友媒體與言論平臺(tái) http://www.cnbeta.com/
44 fyter的博客 http://www.fyter.cn/Default.aspx
45 asp.net控件 http://www.devexpress.com/
46 operamask http://www.operamasks.org/
47 中國(guó)源碼網(wǎng) http://www.yuanma.org/
48 sawin軟件研發(fā)之窗 http://www.sawin.cn/
49 電腦教育與WEB教育在線 http://210.40.7.188/
50 中國(guó)dos聯(lián)盟 http://www.cn-dos.net/
51 中國(guó)bios聯(lián)盟 http://www.biosren.com/index.php
52 bioscentral http://bioscentral.com/
53 eda專(zhuān)業(yè)論壇 http://www.edacn.net/bbs/
54 諾基亞論壇 http://forum.nokia.com.cn/sch/index.html
55 計(jì)算機(jī)科學(xué)論壇 http://www.ieee.org.cn/index.asp
56 ibm developerworks 中國(guó) http://www.ibm.com/developerworks/cn/
57 w3 http://www.w3.org/
58 網(wǎng)頁(yè)設(shè)計(jì)師 http://www.w3cn.org/
59 中國(guó)萬(wàn)維網(wǎng)聯(lián)盟 http://www.w3china.org/index.htm
60 豆瓣 http://www.douban.com/
61 程序員門(mén)戶(hù)站:http://www.gxcxy.com
62 軟件商務(wù)網(wǎng) http://www.bizsofts.com/
63 sun http://www.sun.com/
64 google code http://code.google.com/
65 google 開(kāi)發(fā)人員主頁(yè) http://code.google.com/intl/zh-CN/
66 the official microsoft asp.net http://www.asp.net/
67 microsoft IIS http://www.iis.net/default.aspx?tabid=1
68 榮耀 http://www.royaloo.com/index.html
69 侯捷網(wǎng)站 http://jjhou.csdn.net/
70 java大本營(yíng) http://www.javadby.com/
71 比特網(wǎng) http://www.chinabyte.com/
72 51cto http://www.51cto.com/
73 infoq http://www.infoq.com/
74 博客堂 http://blog.joycode.com/
75 嵌入式開(kāi)發(fā)網(wǎng) http://www.embed.com.cn/
76 嵌入式開(kāi)線 http://www.mcuol.com/
77 中嵌網(wǎng) http://www.chinaeda.cn/
78 酷勤網(wǎng) http://www.kuqin.com/
79 紅聯(lián)linux門(mén)戶(hù) http://www.linuxdiyf.com/
80 itpub技術(shù)門(mén)戶(hù) http://www.itpub.net/
81 程式設(shè)計(jì)俱樂(lè)部 http://www.programmer-club.com/index.asp
82 uml軟件工程組織 http://www.uml.org.cn/index.asp
83 delphi園地 http://www.delphifans.com/
84 theserverside http://www.theserverside.com/
85 中國(guó)donet俱樂(lè)部 http://www.chinaaspx.com/
86 編程王 http://www.kingofcoders.com/
87 it168 http://www.it168.com/
88 open source software in c# http://csharp-source.net/
89 中國(guó)IT實(shí)驗(yàn)室 http://www.chinaitlab.com/
90 落伍者站長(zhǎng)論壇 http://www.im286.com/
91 中國(guó)站長(zhǎng)站 http://www.chinaz.com/
92 asp.net源碼下載專(zhuān)業(yè)站 http://www.51aspx.com/
93 it職業(yè)工程師 http://www.51myit.com/
94 太平洋電腦網(wǎng) http://www.pconline.com.cn/
95 乘風(fēng)原創(chuàng)程序 http://study.qqcf.com/
96 網(wǎng)易學(xué)院 http://tech.163.com/school/
97 程序設(shè)計(jì)/程序開(kāi)發(fā)類(lèi)教程 http://www.pcvz.com/Program/Programs/Index.html
98 算法源碼吧 http://www.sfcode.cn/
99 codegurn http://www.codeguru.cn/
100 得益網(wǎng) http://www.netyi.net/
101 中國(guó)eclipse社區(qū) http://www.eclipseworld.org/bbs/
102 項(xiàng)目管理者聯(lián)盟 http://www.mypm.net/
103 棲息谷 http://www.21manager.com/
104 J2me開(kāi)發(fā)網(wǎng) http://www.j2medev.com/bbs/index.asp
105 卓越亞馬遜 http://www.amazon.cn/
WEB技術(shù):
WEB前端開(kāi)發(fā) http://www.css88.com/
Ext JS官方網(wǎng) http://www.extjs.com/
Ext JS中文資料 http://www.extjs.org.cn/
義:不同的地理信息系統(tǒng)或地理信息系統(tǒng)與其他信息系統(tǒng)之間實(shí)施數(shù)據(jù)雙向交換時(shí)采用的數(shù)據(jù)格式
引自百度百科
據(jù)百度百科上的描述數(shù)據(jù)交換這個(gè)詞最早是在《地理信息系統(tǒng)名詞》第二版,很明顯不是用來(lái)做編程的。在編程方面數(shù)據(jù)交換格式僅僅是一種格式,當(dāng)前主流使用的格式有 3 種 : XML、JSON、YAML
既然是一種格式,那么它就需要標(biāo)準(zhǔn),因?yàn)橥ㄟ^(guò)標(biāo)準(zhǔn)可以限定各個(gè)格式中的具體內(nèi)容
XML(全稱(chēng)EXtensible Markup Language),在我看來(lái)它是一種古老的數(shù)據(jù)交換格式,因?yàn)閺奈医佑|到編程開(kāi)始它就已經(jīng)存在了
標(biāo)準(zhǔn)所在網(wǎng)址:https://www.w3.org/TR/1998/REC-xml-19980210
最新文檔地址:https://www.w3.org/TR/REC-xml/
其實(shí)XML的標(biāo)準(zhǔn)一直是1.0,至少我沒(méi)有見(jiàn)過(guò)其他的,一般情況下我們?cè)诰帉?xiě)XML文檔的時(shí)候都需要遵循一個(gè)約束文件,這個(gè)約束文件中規(guī)定了你可以編寫(xiě)的內(nèi)容。約束文件存在的方式也有兩種,原來(lái)是 DTD 格式現(xiàn)在主流的是 Schema
XML 如果想完整的學(xué)習(xí)還是比較費(fèi)勁的,不過(guò)一般情況下要求約束文檔能看懂,XML內(nèi)容會(huì)編寫(xiě)即可
參考網(wǎng)址:https://www.w3school.com.cn/x.asp
Delphi解析可使用 TXMLDocument(Delphi自帶),此外也可以使用微軟的 MSXML2 我沒(méi)有這種需求所以并沒(méi)有深入研究
官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/Xml
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。相比于XML格式JSON更為簡(jiǎn)單明了
標(biāo)準(zhǔn)文檔地址:http://www.json.org/json-zh.html
具體的語(yǔ)法規(guī)則可以參考上面網(wǎng)址的文檔內(nèi)容,中文的
Delphi官方(當(dāng)前最新版本DelphiXE10.4.2)已經(jīng)支持對(duì)于JSON的解析了,官方文檔地址
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON
需要注意的是有些類(lèi)是Tokyo 10.2新增的,在使用的時(shí)候需要檢查一下自己的版本
YAML (全稱(chēng)YAML Ain’t Markup Language),YAML不是標(biāo)記語(yǔ)言的意思,YAML是便于人閱讀基于unicode 編碼的各種語(yǔ)言的序列號(hào)標(biāo)準(zhǔn)。
YAML語(yǔ)言的設(shè)計(jì)參考了JSON,XML和SDL等語(yǔ)言。YAML 強(qiáng)調(diào)以數(shù)據(jù)為中心,簡(jiǎn)潔易讀,編寫(xiě)簡(jiǎn)單
官網(wǎng)地址:http://yaml.org
一個(gè)讓人頭皮發(fā)麻的站點(diǎn)
學(xué)習(xí)的話(huà)可以參考 阮一峰 老師的博客內(nèi)容,地址:https://www.ruanyifeng.com/blog/2016/07/yaml.html
沒(méi)有找到官方支持,不過(guò)在GitHub上有一個(gè)開(kāi)源庫(kù)是支持Delphi解析YAML格式數(shù)據(jù)的,有興趣的朋友可以去研究
地址:https://github.com/neslib/Neslib.Yaml
最后我想說(shuō)我非常討厭這種數(shù)據(jù)格式,和python一樣依靠縮進(jìn)和空格控制語(yǔ)法。。。
將原來(lái)視頻中講解的代碼在DelphiXE10.4.2上進(jìn)行了重構(gòu)
uses
System.JSON, System.Generics.Collections, System.JSON.Serializers,
System.SysUtils;
type
{ 實(shí)體類(lèi),主要是用于JSON字符串和類(lèi)對(duì)象的互相轉(zhuǎn)換 }
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;
begin
end;
constructor TStudent.Create(FName: string; FAge: Integer);
begin
Self.FName :=FName;
Self.FAge :=FAge;
end;
begin
{ 定義一個(gè)JSON字符串 }
var
UserJson :='{"FName":"小黑","FAge":18}';
{ 創(chuàng)建序列化對(duì)象 }
var
Serializer :=TJsonSerializer.Create();
{ 反序列化,其實(shí)就將字符串轉(zhuǎn)為對(duì)象 }
var
Student :=Serializer.Deserialize<TStudent>(UserJson);
Writeln('反序列化:' + Student.Name + ',' + Student.Age.ToString);
{ 列表轉(zhuǎn)換,將TLIst容器轉(zhuǎn)為字符串,也可以說(shuō)是數(shù)組轉(zhuǎn)換 }
var
List :=TList<TStudent>.Create;
List.Add(TStudent.Create('小白', 30));
List.Add(TStudent.Create('蕭薔', 30));
// 創(chuàng)建序列化對(duì)象
Serializer :=TJsonSerializer.Create();
Writeln('序列化:' + Serializer.Serialize < TList < TStudent >> (List));
var
{ 一個(gè)比較復(fù)雜的json字符串 }
Users :='{"FListHelper":{"FCount":2},"FItems":[{"FName":"小白","FAge":30},{"FName":"蕭薔","FAge":30}],"FComparer":{}}';
// 創(chuàng)建序列化對(duì)象
Serializer :=TJsonSerializer.Create();
{ 可以嘗試下這里會(huì)不會(huì)有問(wèn)題,當(dāng)字段匹配時(shí)居然可以直接轉(zhuǎn)換 }
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.
其實(shí)Delphi自帶的JSON解析已經(jīng)夠用了,如果不能滿(mǎn)足你的話(huà)有一個(gè)開(kāi)源庫(kù)你可以嘗試,不過(guò)我看它最近一次更新代碼是 3 年前....
Github地址:https://github.com/hgourvest/superobject
學(xué)習(xí)資料(萬(wàn)一老師的博客):https://www.cnblogs.com/del/category/215158.html
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。