一.概要
1.応用シーン
JavaScriptの流行にともない、JSON形式のデータが広く利用されるようになっていますが、JSON形式の柔軟性のため、このようなデータ構造を他のデータと一緒に解析した場合、構造が統一されていないため解析できないという問題があり、FineReport帳票で直接に利用することはできません。このプラグインは、JSON形式のデータを帳票で使用できるデータテーブルに変換できます。
2.文法規則
JSONクエリーの詳細な文法規則はJsonPathをご参照ください。
二.JSONデータセット
1.JSONデータ接続を定義
プラグインをインストールした後、デザイナのメニューバーでサーバ-データ接続を定義を選択し、JSONデータ接続を新規作成し、JSONという名前を付けます。http://fine-doc.oss-cn-shanghai.aliyuncs.com/book.jsonを入力し、次の図に示したように他の設定項目を設定し、OKをクリックします。次の図のようになります。
注:返されたテキスト情報は、JSON形式のテキストであれば問題ありません。

設定項目の詳しい説明は次のように示します。
| 設定項目 | 意味 |
|---|---|
アドレス | jsonテキストのリクエストを入力するためのアドレスです(HTTPおよび非自己署名SSL証明書をサポートするHTTPS)。 アドレスはパラメータをサポートします。データセットと同じく、設計の時にクエリを実行するため、デフォルトパラメータを提供するように注意してください アドレスは帳票関数とセル計算以外のすべての数式をサポートします 注:ユーザーがパラメータを取得する時にできるだけ単純なインタフェースで接続してください。「 .json 文件」形式ではパラメーターが渡せません。 |
ユーザー名のパスワード | 認証情報を入力するために使用されます。空白が許可され、Authorization:Basic Base64(username:password)形式の認証のみサポートされています |
キャッシュの有効期限 | キャッシュの有効期限を設定する項目です。ミリ秒を単位で、デフォルトは0のことがキャッシュしないと示します。 キャッシュ時間を設定すると、最初の接続後にキャッシュされます(クラスタをサポート)。キャッシュの有効期限内に読み込まれた結果は、リクエストインタフェースデータの変化に関係なく、全てキャッシュされます |
リクエストタイプ | さまざまなリクエストタイプを設定し、リクエストタイプに基づいてパラメーターの渡し方を設定するために使用されます。 リクエストタイプのデフォルト値はGETですが、POST_FROMおよびPOST_RAWに変更できます。リクエストタイプについては、本文の3節をご参照ください。 |
通常パラメータ | Bodyに格納され、普通に呼ばれるGET、POSTは通常パラメータです 通常パラメータは、パラメータの追加と削除をサポートしています。リフレッシュボタンを使用し、アドレスに設定されているパラメータを直接リフレッシュできます(この場合、元のパラメータ設定はリフレッシュされたパラメータに上書きされます) |
リクエストヘッダーパラメーター | リクエストヘッダーパラメーターはHeaderに格納されます。毎回のリクエストはheaderが必要のため、よく使われる不変量は通常headerに格納されます。 リクエストヘッダーパラメータは手動のみで追加・削除・変更でき、帳票関数とセル計算以外のすべての数式をサポートします |
コード | ファイルがUTF-8でない場合は、コードのところで対応するコードを選択する必要があります。そうしないと、テキスト情報を正しく解析できません |
注1:V9.3.3バージョンのプラグインのスクリプトエンジンはJavaScript V8またはJava(デフォルト)を自主的に選択することをサポートしています。JavaScript V8をサポートできないデバイスでは、Javaバージョンのスクリプトエンジンが自動的に使用されます。
注2:追加するパラメータのタイプは、サーバがサポートしているパラメーターによります。
2.JSONデータセットクエリ
次の図に示すように、デザイナでJSONデータセットを新規作成します。

2.1.すべてのデータを取り出す
新しく作成されたJSONデータセットの編集ボタンをクリックし、クエリ文を入力すると、JSON内のデータを取得することができます。クエリ文のところに$.store.book[*]を入力すると、次の図に示すように、本屋にあるすべての本の情報が検索できます。
注:$.store.book[*] はJSONの決まりのパス式です。store内のbookのすべてのデータを取り出すことを表します。

プレビューボタンをクリックし、取り出したJSONデータを表示します。

キーソート:取得されたカラム名をソートすることを指します。デフォルトではオンになっていません(json構造が不完全な場合は、有効化するため、カラム名の先読みも同時にオンにする必要があります)。
列名事前読み取り:すべてのデータを先に読み、列名を取得することです。JSON構造が整っていない場合に使用すると、効率が少し低下になります。デフォルトではオンになっていません。
2.2.中にある1つの列を取り出す
クエリ文のところに$.store.book[*].categoryを入力し、category列のデータを取り出します。

プレビューボタンをクリックし、取り出したJSONデータを表示させます。

2.3.条件クエリ
クエリ文のところに$.store.book[?(@.price<10)]を入力し、価格が10未満の書籍データを取り出します。

プレビューボタンをクリックし、取り出したJSONデータを表示させます。

注1:キーと値のペアの順序が一致しないとデータが乱れる可能性があるため、列名事前読み取りをオンにすることができます。
3.パラメータ受け渡し方法の紹介
パラメータ受け渡し方法の違い
| モード | 受け渡し方法 |
|---|---|
GET | URLに連結します |
POST_FORM | 渡さなければならないのはkey-valueであり、ダイナミックパラメータを追加することができます |
POST_RAW | value を渡すだけでよいです。動的パラメータを追加できます |
注:ユーザーがパラメータを取得する際、アドレスはできるだけ単純なインタフェースを接続してください。「.json 」ファイル形式はパラメータの受け渡しをサポートしていません。
3.1.GETによるパラメータ受け渡し
次の図に示すように、json接続を作成し、リクエストタイプを「GET」に選択し、jsonテキストのアドレスの後にパラメータを追加します。

次の図に示すように、「json」データセットを追加し、クエリー文を入力し、返されたパラメータbookに対応するデータは下記の図のとおりです。

3.2.POST_FORMによるパラメータ受け渡し
下記の図に示すように、JSONデータ接続を作成し、リクエストタイプを「POST_FORM」に選択します。アドレスのところに対応するjsonテキストのインタフェースリンクを入力し、通常パラメータを手動で追加します。

次の図に示すように、「json」データセットを追加し、クエリ文を入力し、パラメータbookに対応するデータが返されます:

3.3.POST_RAWによるパラメータ受け渡し
POST_RAWのパラメータの受け渡しではパラメータを手動で指定する必要があるため、リクエストヘッダーパラメータでContent-Typeをapplication/jsonに設定する必要があります。これは、クライアントが実際に送信するデータはJSON形式であることをサーバに伝えていると表します。
次の図に示すように、JSONデータ接続を作成し、リクエストタイプを「POST_FORM」に選択します。アドレスのところに対応するjsonテキストインタフェースリンクを入力します。

プレビューの時、返されたパラメータbookに対応するデータが次の図に示すようになります。

動的パラメータを使用する場合は、${}を通じてダイナミックパラメータを渡し、リフレッシュボタンをクリックしてパラメータを設定します。

三.JSONプログラムデータセット
JavaScriptスクリプトを使用し、JSONオブジェクトをテーブルに変換します。この方法は、JSONデータセットを直接使用できないすべての場合を解決することができ、ユーザー自身のデータ構造に基づいてスクリプトをカスタマイズすることができます。それにより、帳票とのドッキングを実現することができます。
注:JSONプログラムデータセットを新規作成し、使用するには、デザイナのJARファイルは2019-03-13以降、プラグインを9.2.3とその後のバージョンに更新する必要があります。
1.JSONプログラムデータセットの新規作成
次の図に示すように、デザイナでJSONプログラムデータセットを新規作成します。

2.すべてのデータを取り出し
新規作成したJSONデータセットの編集ボタンをクリックし、下記の図のスクリプトコードを入力すると、すべての書籍のデータを取得できます。
スクリプトコード:
var books = $.store.book;
var rowCount = books.length;
console.log("行数:" + rowCount);
var table = [];
var column = [];
books.forEach(function(value, index) {
var row = [];
for (var key in value) {
row.push(value[key]);
column.push(key);
}
console.log("この行には" + row.length + "列がある");
table.push(row);});
return merge(table, unique(column))

プレビューボタンをクリックし、取り出したJSONデータを表示します。

スクリプトにビルトイン関数と変数は次の表に示すように説明されます。
| ビルドイン関数と変数 | 意味 |
|---|---|
$ | JSONコンテンツのオブジェクトを表します |
unique(array) | 配列の重複を除き、主にカラム名の処理に使用されます |
console.log(info) | DeBug情報を出力し、INFOレベルの情報がログファイルに出力します |
console.error(err) | エラーレベルの情報を出力し、ログファイルにERRORレベルの情報を出力します |
merge(table, column) | データセットの内容とカラム名のオブジェクトを結合します |
books.forEach | JS配列トラバーサル方法 |
3.条件クエリ
スクリプト編集ボックスに次のスクリプトコードを入力し、価格が10未満の書籍データを取り出します。
var books = $.store.book;
var rowCount = books.length;
var table = [];
var column = [];
books.forEach(function(value, index) {
var row = [];
if (value.price < 10) {
for (var key in value) {
row.push(value[key]);
column.push(key);
}
table.push(row);
}
});
return merge(table, unique(column));

プレビューボタンをクリックし、取り出したJSONデータを表示します。

4.中にある1つの列を取り出し
スクリプト編集ボックスに次のスクリプトコードを入力し、すべての書籍の著者のデータセットを取り出します。
var books = $.store.book;
var rowCount = books.length;
var table = [];
var column = ["author"];
books.forEach(function(value, index) {
var row = [];
row.push(value.author);
table.push(row);});
return merge(table, column);

プレビューボタンをクリックし、取り出したJSONデータを表示します。

四.プレビュー効果

注:PCとモバイル端末の効果が同じで、実際のニーズに応じて対応するデータセットを選択できます。