アプリケーションでデータベースのデータを操作する場合、開発者のほとんどはデータセット(DataSet)を使用することが多いと思います。データセットが便利なのは、データベースから取得した単一あるいは複数のテーブルのレコードをDelphiで扱いやすいデータ形式にマッピングし、そのデータを行と列で全て表すことができる点です。 そしてレコード(データ)の整理やデータの操作など、複雑な動作を伴う処理を、カプセル化したデータセットオブジェクト(クラス)として提供しています。
Delphiでデータベースアプリケーションを作成する上では、ほぼ必須となるデータセットですが、Delphiだけに限らず、他の開発言語でも同じようなオブジェクトの概念を持っており、データセットが利用されています。
現在のWebサーバーやWebサービスのバックエンドは、JavaScriptなどのスプリクト言語で動作していることが多く、それらのサーバーと連携するためには、Delphiネイティブのデータ形式ではなく、JavaScriptの固有のデータ形式であるJSON形式へ変換する必要があります。
Delphi XE5以降のバージョンのFireDACでは、データセットをJSON形式で読み書き可能なSaveToFileとLoadFromFile(あるいはSaveToStreamとLoadFromStream)などの変換するメソッドが標準提供されていますが、変換されるJSONデータのヘッダー部にはFireDAC固有のデータが埋め込まれており、FireDACでの利用が前提となっております。そのためFireDACが利用できないアプリケーション環境では、そのJSONデータを読み込み/保存することはできません。
問題を解決するために、自前でデータセットをJSON形式に変換する方法もありますが、Delphiの豊富なエコシステムの中には、データセットをJSON形式に変換する便利なユーティリティがサードパーティからいくつか提供されています。
そのユーティリティの一つが「DataSet Serialize」です。
DataSet Serializeとは
「DataSet Serialize」は、Delphi向けのJSONとDataSetを簡単に扱うための機能セットです。
- レコードをDataSetへインポート/エクスポート
- JSONデータ(必要な属性を含む)の検証
- DataSetをJSON形式にエクスポート/インポート
- マスター/詳細またはTDataSetFieldを使用してネストされたJSONを管理
などの機能があります。
これらはすべてクラスヘルパーを使用しているため、さらにシンプルで使いやすくなっています。
DataSet Serializeを利用するには
GitHubにホストされているこちらのページからDataSet Serializeのライブラリがダウンロードできます。
ダウンロード後、任意のパスにZIPファイルを展開し、ソース(Src)フォルダをライブラリパスに追加してください。
1 |
../dataset-serialize/src |
DataSet Serializeが提供するすべての機能は、DataSet.Serializeユニットのクラスヘルパにあります。プロジェクトで利用するためには、以下の例のようにuses句にユニットを追加してください。
1 |
uses DataSet.Serialize; |
自身のプロジェクトコードにDataSet.Serializeユニットを定義することで、DataSetクラスでJSONを扱うための様々なヘルパーメソッドが利用できます。
DataSetからJSONへ変換するコード例:
1 2 3 4 5 6 7 |
var LJSONArray: TJSONArray; LJSONObject: TJSONObject; begin LJSONObject := qrySamples.ToJSONObject(); // export a single record LJSONArray := qrySamples.ToJSONArray(); // export all records end; |
上記2つの関数の違いは、ToJSONObjectは、DataSetの現在のレコードのみをTJSONObjectに変換し、ToJSONArrayは、選択されたレコードだけでなく、DataSetのすべてのレコードをTJSONArrayに変換します。
JSONを検証するコード例:
ValidateJSON関数は、リクエストで受け取ったJSONに必要な情報がすべて含まれているかどうかをサーバー上で検証したい場合などに非常に便利です。実際には、データセットのすべてのフィールドが走査され、必要なフィールドがJSONで入力されているかどうかがチェックされます。
1 2 3 |
begin LJSONArray := qrySamples.ValidateJSON('{"country":"Brazil"}'); end; |
JSONを読み込みデータセットへ変換するコード例:
DataSet Serializeでは、LoadFromJSON関数を使用してJSONObject、JSONArray、さらにはネストしたJSONを持つDataSetを1つのメソッドにまとめてロードすることができます。使用方法の例は、以下の通りです。
1 2 3 |
begin qrySamples.LoadFromJSON('{"firstName":"Vinicius Sanchez","country":"Brazil"}'); end; |
JSONから結合コードするコード例:
DataSet Serializeでは、MergeFromJSONObject関数を使用するだけで、DataSetの登録を変更することができます。この機能はLoadFromJSON関数と似ています。使用例としては、リクエストで使用される動詞がPUT(必ずしもそうではない)の場合のRESTサーバーで、この場合、新しいレコードを含めるのではなく、現在のレコードを変更します。
1 2 3 |
begin qrySamples.MergeFromJSONObject('{"firstName":"Vinicius","country":"United States"}'); end; |
関連情報
このライブラリに関する詳しい情報は、こちら(抄訳)を参照ください。
DataSet Serializeは、オープンソースプロジェクトで、ライセンス規約はこちらを参照ください。このプロジェクトは、多くの素晴らしいcontributorsによって維持されています。なお、エンバカデロではこの製品に関するテクニカルサポートサービスは提供しておりません。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition