JSON Field
JSONデータをDrupalフィールドに保存するための仕組みを提供し、JSONコンテンツの編集・表示用に様々なフィールドタイプ、ウィジェット、フォーマッターを備えています。
json_field
インストール
composer require 'drupal/json_field:8.x-1.7'
composer require 'drupal/json_field:8.x-1.3'
概要
JSON Fieldは、DrupalエンティティフィールドにJSONデータを保存できる包括的なモジュールです。異なるデータベースバックエンドとユースケースに最適化された3つの異なるフィールドタイプを提供します:すべてのデータベースと互換性のあるテキストベースのストレージオプション、およびMySQL、PostgreSQL、MariaDB、SQLite向けのデータベース固有のJSONカラムタイプを活用する2つのネイティブJSONストレージオプションです。
このモジュールには、有効なJSONのみが保存できることを確認するバリデーション、JSONデータを表示するための複数の表示フォーマッター、JSON Editor WYSIWYGウィジェットによるオプションの高度な編集機能が含まれています。ViewsとシームレスにインテグレーションしてJSONデータをリスト表示でき、Feedsモジュールを使用したJSONコンテンツのインポートをサポートし、Diffモジュールと連携してJSONフィールドのリビジョンを比較できます。
JSON:APIとのインテグレーションでは、JSON:API Extrasでエスケープされた文字列ではなく生のJSONを出力するように設定でき、ヘッドレスDrupal実装やAPIファーストアーキテクチャに最適です。
Features
- 異なるストレージバックエンドを持つ3つのJSONフィールドタイプ:テキストベース(VARCHAR/TEXT)、ネイティブJSON、およびデータベース最適化ストレージ用のJSONB/JSON
- 有効なJSONデータのみがフィールドに保存できることを保証する自動JSONバリデーション
- 基本的なJSON編集用のプレーンテキストエリアウィジェットと、高度な編集体験のためのオプションのJSON Editor WYSIWYGウィジェット
- オプションのJSONViewライブラリを使用したプレーンテキストと人間が読みやすいPrettyフォーマッターを含む複数の表示フォーマッター
- RESTエクスポート用の特別なJSONデータフィールドハンドラーを備えたViewsインテグレーション
- JSON Editorウィジェットサブモジュール使用時のJSON Schemaバリデーションサポート
- 外部ソースからJSONデータをインポートするためのFeedsモジュールとのインテグレーション
- エンティティバージョン間でJSONフィールドのリビジョンを比較するためのDiffモジュールとのインテグレーション
- RESTおよびJSON:APIコンテキストでの適切なJSON出力のためのカスタムシリアライゼーションノーマライザー
- テキストベースストレージ用の設定可能なフィールドストレージサイズオプション(255文字から1GB)
Use Cases
APIレスポンスデータの保存
外部サービスからの完全なAPIレスポンスをJSONフィールドに保存し、キャッシュ、監査、またはさらなる処理に使用します。ネイティブJSONフィールドタイプを使用すると、サポートされているデータベースで保存されたデータのデータベースレベルのクエリが可能になります。
柔軟なコンテンツ属性
追加フィールドを作成せずに、コンテンツタイプに動的でスキーマフリーな属性を追加します。エンティティ間で異なる可能性のある商品仕様、イベントメタデータ、またはユーザー設定をJSONオブジェクトとして保存します。
カスタム機能の設定ストレージ
カスタムモジュールやインテグレーションの複雑な設定データを保存します。エディターウィジェットでJSON Schemaバリデーションを使用して、設定が期待される構造に準拠していることを確認します。
ヘッドレスDrupal APIデータ
デカップルドフロントエンドアプリケーション向けに、DrupalのRESTまたはJSON:APIエンドポイントを通じて構造化されたJSONデータを提供します。カスタムノーマライザーとJSON:API Extrasインテグレーションにより、適切なJSON出力が保証されます。
データ移行のステージング
移行中に複雑なデータを一時的に保存し、最終的なDrupal構造に処理する前に使用します。JSONフィールドは、最終スキーマでは複数の関連エンティティが必要になるネストされたデータを保持できます。
フォームビルダーデータストレージ
フォーム定義、アンケートの質問、またはクイズデータをJSONとして保存します。ツリーとフォームエディターモードにより、コンテンツ編集者は生のJSONを書かずにネストされたデータ構造を簡単に管理できます。
Tips
- 最大限のデータベース互換性にはJSON(テキスト)フィールドタイプを使用し、データベースレベルのJSONクエリが必要な場合のみネイティブJSONタイプを使用してください
- 「最大許容容量」設定を適切に構成して、必要以上のデータベースリソースを使用しないようにしてください
- Prettyフォーマッターは外部ライブラリを必要とせず、シンプルなJSON表示ニーズに最適です
- 複雑なユースケースでデータ構造要件を強制するには、エディターウィジェットでJSON Schemaバリデーションを有効にしてください
- MariaDBはJSONをLONGTEXTカラムに保存しますが、データに対するJSONクエリ操作はサポートしています
- Views RESTエクスポートで使用する場合、文字列ではなく生のJSONを出力するために「(data)」サフィックス付きのフィールドを選択してください
Technical Details
Troubleshooting 6
JSON:API Extrasモジュールをインストールし、admin/config/services/jsonapi/resource_typesでリソースタイプをオーバーライドし、JSONフィールドのエンハンサーとして「JSON Field」を選択します。
jquery-jsonviewライブラリが/libraries/jquery-jsonview/dist/にインストールされており、jquery.jsonview.jsとjquery.jsonview.cssの両方のファイルが存在することを確認してください。
JSON Field Widgetサブモジュールを有効にし、jsoneditorライブラリを/libraries/jsoneditor/dist/にインストールし、フォーム表示設定でフィールドウィジェットを「JSON専用WYSIWYGエディター」に変更してください。
データベースバージョンが最小要件を満たしていることを確認してください:MySQL 5.7.8+、MariaDB 10.2.7+、PostgreSQL 9.2+、またはSQLite 3.26+。ネイティブJSONフィールドタイプの場合、データベースがJSONカラムをサポートしている必要があります。
これはバージョン8.x-1.6で修正されました。空の非必須フィールドのスキーマバリデーションの問題を解決するには、最新バージョンに更新してください。
DrupalコアのデータベースエクスポートスクリプトはJSONフィールドタイプを完全にはサポートしていません。コアの問題#3343634(META)、#3143512(MySQL/MariaDB)、#2472709(PostgreSQL)、#3325871(SQLite)の進捗を追跡してください。
Security Notes 4
- JSONデータは保存前にバリデーションされ、有効なJSONのみが保存できることを確認します
- モジュールはJSONのエンコード/デコードにDrupalのシリアライゼーションサービスを使用し、セキュリティのベストプラクティスに従っています
- JSON Schemaバリデーション(有効な場合)は、データ整合性検証の追加レイヤーを提供します
- フィールドレベルの権限は標準のDrupalフィールドアクセスメカニズムを通じて制御されます