サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

データセットとJSON間のシリアライズをもっと簡単に!!

json

アプリケーションでデータベースのデータを操作する場合、開発者のほとんどはデータセット(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 Serializeを利用するには

GitHubにホストされているこちらのページからDataSet Serializeのライブラリがダウンロードできます。

ダウンロード後、任意のパスにZIPファイルを展開し、ソース(Src)フォルダをライブラリパスに追加してください。

[crayon-6768eb3286c1a991821756/]

DataSet Serializeが提供するすべての機能は、DataSet.Serializeユニットのクラスヘルパにあります。プロジェクトで利用するためには、以下の例のようにuses句にユニットを追加してください。

[crayon-6768eb3286c30765875146/]

自身のプロジェクトコードにDataSet.Serializeユニットを定義することで、DataSetクラスでJSONを扱うための様々なヘルパーメソッドが利用できます。

DataSetからJSONへ変換するコード例:

[crayon-6768eb3286c33838011486/]

上記2つの関数の違いは、ToJSONObjectは、DataSetの現在のレコードのみをTJSONObjectに変換し、ToJSONArrayは、選択されたレコードだけでなく、DataSetのすべてのレコードをTJSONArrayに変換します。

JSONを検証するコード例:

ValidateJSON関数は、リクエストで受け取ったJSONに必要な情報がすべて含まれているかどうかをサーバー上で検証したい場合などに非常に便利です。実際には、データセットのすべてのフィールドが走査され、必要なフィールドがJSONで入力されているかどうかがチェックされます。

[crayon-6768eb3286c35057200826/]

JSONを読み込みデータセットへ変換するコード例:

DataSet Serializeでは、LoadFromJSON関数を使用してJSONObject、JSONArray、さらにはネストしたJSONを持つDataSetを1つのメソッドにまとめてロードすることができます。使用方法の例は、以下の通りです。

[crayon-6768eb3286c36478681949/]

JSONから結合コードするコード例:

DataSet Serializeでは、MergeFromJSONObject関数を使用するだけで、DataSetの登録を変更することができます。この機能はLoadFromJSON関数と似ています。使用例としては、リクエストで使用される動詞がPUT(必ずしもそうではない)の場合のRESTサーバーで、この場合、新しいレコードを含めるのではなく、現在のレコードを変更します。

[crayon-6768eb3286c38208362778/]

関連情報

このライブラリに関する詳しい情報は、こちら(抄訳)を参照ください。

DataSet Serializeは、オープンソースプロジェクトで、ライセンス規約はこちらを参照ください。このプロジェクトは、多くの素晴らしいcontributorsによって維持されています。なお、エンバカデロではこの製品に関するテクニカルサポートサービスは提供しておりません。

モバイルバージョンを終了