Delphi 提供了多元的 JSON 與 XML 資料處理方法,Fluent Builders 可讀性高,讓程式碼更貼近 JSON 結構。TJSONObject 和 TJsonTextReader 則分別對應 DOM 和串流解析方式,滿足不同情境需求。XML 處理方面,TXMLDocument 提供穩定的解析功能,而 XML Data Binding Wizard 則能簡化物件對映,減少程式碼撰寫負擔。這些工具的搭配使用,能大幅提升 Delphi 應用程式在資料處理方面的效率。
Delphi 中的 JSON 與 XML 資料處理技巧
Delphi 為開發者提供了多種處理 JSON 和 XML 資料的方法。本文將深入探討使用 Fluent Builders 生成 JSON 資料、JSON Data Binding Wizard 自動生成物件對映、TXMLDocument 處理 XML 資料,以及 XML Data Binding Wizard 的應用。這些技術將幫助開發者更高效地處理資料交換和儲存。
使用 Fluent Builders 生成 JSON 資料
Fluent Builders 是 Delphi 中一種生成 JSON 資料的方法,其特點是使程式碼結構更貼近最終生成的 JSON 格式。這種方法的優勢在於其可讀性和可維護性。
Fluent Builders 的實作範例
uses
System.JSON.Builders;
function GenerateJsonWithBuilder: string;
var
StringWriter: TStringWriter;
Writer: TJsonTextWriter;
Builder: TJSONObjectBuilder;
begin
StringWriter := TStringWriter.Create();
Writer := TJsonTextWriter.Create(StringWriter);
Builder := TJSONObjectBuilder.Create(Writer);
try
Writer.Formatting := TJsonFormatting.Indented;
Builder
.BeginObject
.BeginArray('Favorites')
.BeginObject
.Add('Caption', 'Delphi Home Page')
.Add('URL', 'https://www.embarcadero.com/products/delphi')
.EndObject
.BeginObject
.Add('Caption', 'RAD Studio Documentation')
.Add('URL', 'https://docwiki.embarcadero.com/RADStudio')
.EndObject
.EndArray
.EndObject;
Result := StringWriter.ToString;
finally
Builder.Free;
Writer.Free;
StringWriter.Free;
end;
end;
內容解密:
- TStringWriter 和 TJsonTextWriter 的建立:首先,建立
TStringWriter和TJsonTextWriter例項,用於寫入 JSON 資料。 - TJSONObjectBuilder 的使用:建立
TJSONObjectBuilder例項,並將TJsonTextWriter傳入建構子。 - JSON 結構的建立:使用
TJSONObjectBuilder的方法建立 JSON 結構,如.BeginObject、.BeginArray、.Add等。 - 格式化輸出:設定
TJsonTextWriter的Formatting屬性為TJsonFormatting.Indented,以美化輸出的 JSON 字串。 - 結果取得:將
TStringWriter的內容轉換為字串並傳回。
讀取 JSON 資料
在處理 JSON 資料時,開發者需要假設特定的資料結構。有兩種主要的方法來讀取 JSON 資料:使用 DOM 解析和串流解析。
使用 DOM 解析 JSON
uses
System.JSON;
procedure ReadJsonWithDOM(JsonText: string);
var
JsonValue: TJSONValue;
JsonObject: TJSONObject;
JsonArray: TJSONArray;
I: Integer;
begin
JsonValue := TJSONObject.ParseJSONValue(JsonText);
if JsonValue is TJSONObject then
begin
JsonObject := JsonValue as TJSONObject;
JsonArray := JsonObject.GetValue('Favorites') as TJSONArray;
for I := 0 to JsonArray.Count - 1 do
begin
if JsonArray.Items[I] is TJSONObject then
begin
// 處理個別的 JSON 物件
end;
end;
end;
JsonValue.Free;
end;
內容解密:
- TJSONObject.ParseJSONValue:解析 JSON 文字並傳回
TJSONValue參考,指向 JSON 物件的根。 - 檢查 JSON 結構:檢查解析後的 JSON 資料是否符合預期的結構。
- 處理個別物件:遍歷 JSON 陣列並處理個別的 JSON 物件。
使用 TJsonTextReader 解析 JSON
uses
System.JSON.Readers;
procedure ReadJsonWithReader(JsonText: string);
var
StringReader: TStringReader;
JsonReader: TJsonTextReader;
begin
StringReader := TStringReader.Create(JsonText);
JsonReader := TJsonTextReader.Create(StringReader);
try
while JsonReader.Read do
begin
if JsonReader.TokenType = TJsonToken.StartObject then
begin
// 處理 JSON 物件
end;
end;
finally
JsonReader.Free;
StringReader.Free;
end;
end;
內容解密:
- TJsonTextReader 的使用:建立
TJsonTextReader例項,並使用TStringReader提供 JSON 文字。 - 逐一讀取 JSON Token:使用
TJsonTextReader的Read方法逐一讀取 JSON Token。 - 處理個別物件:當遇到
StartObjectToken 時,處理個別的 JSON 物件。
圖表翻譯:
此圖示展示了處理 JSON 資料的基本流程。首先,檢查 JSON 資料的有效性。如果 JSON 結構有效,則進入處理階段;否則,回報錯誤。無論結果如何,最終都會結束處理流程。此圖清晰地說明瞭 JSON 資料處理的條件分支邏輯和不同處理路徑的銜接方式。
處理 XML 資料
儘管 JSON 已成為主流的資料交換格式,XML 仍在許多應用場景中被廣泛使用。Delphi 透過 TXMLDocument 元件支援 XML 處理。
使用 TXMLDocument 處理 XML
uses
Xml.XMLDoc, Xml.XMLIntf;
procedure ReadXmlFile(FileName: string);
var
XMLDoc: TXMLDocument;
RootNode, ChildNode: IXMLNode;
begin
XMLDoc := TXMLDocument.Create(nil);
try
XMLDoc.LoadFromFile(FileName);
XMLDoc.Active := True;
RootNode := XMLDoc.DocumentElement;
for ChildNode in RootNode.ChildNodes do
begin
if ChildNode.IsTextElement then Continue;
// 處理 XML 節點
end;
finally
XMLDoc.Free;
end;
end;
內容解密:
- TXMLDocument 的建立:建立
TXMLDocument例項並載入 XML 檔案。 - 遍歷 XML 節點:取得 XML 檔案的根節點並遍歷其子節點。
- 處理 XML 資料:處理個別的 XML 節點。
使用 XML Data Binding Wizard
XML Data Binding Wizard 可以根據 XML Schema 或現有的 XML 檔案生成對應的 Object Pascal 類別,簡化 XML 資料的處理流程。
圖表翻譯:
此圖示展示了 Delphi 中處理 JSON 和 XML 資料的不同方法和工具。JSON 資料處理可以透過 Fluent Builders 和 JSON Data Binding Wizard 實作,而 XML 資料處理則可以透過 TXMLDocument 和 XML Data Binding Wizard 實作。這些工具和方法幫助開發者更高效地處理資料交換和儲存。
Delphi中讀取XML檔案的實作方法
在Delphi中,讀取XML檔案可以透過使用XML資料繫結技術來實作。以下是一個範例,展示如何使用Delphi讀取XML檔案並將其內容顯示在表單上。
XML檔案結構
假設我們的XML檔案結構如下:
<Favorites>
<Favorite>
<URL>https://example.com</URL>
<Caption>範例網站</Caption>
</Favorite>
<!-- 其他最愛專案 -->
</Favorites>
讀取XML檔案的Delphi程式碼
procedure TFormFavXML.BtnReadClick(Sender: TObject);
var
Favs: TFavorites;
Fav: TFavorite;
FavsXML: IXMLFavoritesType;
I: integer;
begin
Favs := TFavorites.Create;
try
FavsXML := LoadFavorites(GetFilename);
for I := 0 to FavsXML.Count - 1 do
begin
Fav := TFavorite.Create;
Fav.URL := FavsXML[I].URL;
Fav.Caption := FavsXML[I].Caption;
Favs.Add(Fav);
end;
DisplayFavsCount(Favs);
finally
Favs.Free;
end;
end;
內容解密:
此段程式碼展示瞭如何在Delphi中讀取XML檔案。首先,建立一個TFavorites物件來儲存最愛清單。然後,使用LoadFavorites函式從指定的檔案中載入XML資料至FavsXML介面。接著,透過迴圈遍歷FavsXML中的每個Favorite專案,並為每個專案建立一個TFavorite物件,將其URL和Caption屬性指定後加入到Favs清單中。最後,呼叫DisplayFavsCount函式顯示讀取到的最愛專案數量。
程式碼流程圖
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Delphi JSON XML 資料處理技巧
package "系統架構" {
package "前端層" {
component [使用者介面] as ui
component [API 客戶端] as client
}
package "後端層" {
component [API 服務] as api
component [業務邏輯] as logic
component [資料存取] as dao
}
package "資料層" {
database [主資料庫] as db
database [快取] as cache
}
}
ui --> client : 使用者操作
client --> api : HTTP 請求
api --> logic : 處理邏輯
logic --> dao : 資料操作
dao --> db : 持久化
dao --> cache : 快取
note right of api
RESTful API
或 GraphQL
end note
@enduml
圖表翻譯:
此圖示描述了讀取XML檔案並處理最愛清單的流程。首先,程式開始讀取XML檔案,並建立一個TFavorites物件來儲存資料。接著,載入XML檔案並檢查是否存在最愛專案。如果存在,則建立TFavorite物件並將其加入清單中;如果不存在,則直接結束處理。無論結果如何,最後都會顯示最愛專案的數量。
進一步最佳化
- 錯誤處理:在實際應用中,應加入錯誤處理機制,例如檢查XML檔案是否存在、是否能正確解析等。
- 效能最佳化:對於大型XML檔案,可以考慮使用流式解析器(如
TXmlTextReader)來提高效能。 - UI更新:在
DisplayFavsCount函式中,可以考慮更新UI元件(如ListView或TreeView)以顯示最愛清單的詳細內容。