Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
DelphiRAD Studio

データセットと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へインポート/エクスポート
  • JSONデータ(必要な属性を含む)の検証
  • DataSetをJSON形式にエクスポート/インポート
  • マスター/詳細またはTDataSetFieldを使用してネストされたJSONを管理

などの機能があります。

これらはすべてクラスヘルパーを使用しているため、さらにシンプルで使いやすくなっています。

DataSet Serializeを利用するには

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

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

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

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

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

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

JSONを検証するコード例:

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

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

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

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

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

関連情報

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

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


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES