1. 概述
1.1 版本
報表伺服器版本 | JSON資料集插件 |
---|---|
11.0 | V9.5.7 |
11.0.8 | V9.5.8 |
11.0.10 | V9.5.9 |
1.2 應用場景
隨着 JavaScript 的流行,JSON 格式的資料也被越來越廣泛的使用。使用 JSON 資料集插件可以將 JSON 格式的資料轉變為報表中可以使用的資料表。
1.3 文法規則
JSON 查詢的詳細文法規則參見文檔:JsonPath
注:JsonPath文法內寫參數的方法,與普通資料集一緻。
1.4 方案對比
對比項 | 當前方案 | 新方案 |
---|---|---|
方案簡介 | 本文方法,在 FineReport 中下載「JSON 資料集」插件實現 | 本文不做介紹 使用 FineDataLink 產品 中的「JSON 解析」算子實現 |
主要實現程式 | 需要提前學習 JSON 查詢的文法 建立 JSON 資料集後,輸入查詢語句,取出資料 | 「JSON 解析」算子中,無需輸入查詢語句,直接視覺化選擇節點即可 |
2. 安裝插件
點選下載插件:JSON資料集
3. JSON資料集
3.1 定義 JSON 資料連結
1)準備範例json
帆軟不提供線上json除錯,僅提供本文範例json檔案:book.zip
請將book.json檔案上傳至你自己的伺服器,生成可線上存取的連結 。
2)建立資料連結
設計器菜單欄選擇伺服器>定義資料連結,建立一個 JSON 資料連結,命名為 JSON 。
輸入連結地址,並按如下圖所示配置好其他設定項,點選「確定」。如下圖所示:
注:請求地址傳回的正文資訊,只要是 JSON 格式的正文即可。
設定項的詳細說明如下圖所示:
設定項 | 含義 |
---|---|
地址 | 用於輸入json正文的請求地址(支援 HTTP 和非自簽章 SSL 憑證的 HTTPS) 地址支援參數,和資料集一樣,注意提供一個預設參數供設計的時候查詢用; 地址支援除報表函式和儲存格計算以外的所有公式; 注:建議使用者獲取參數時使用單純的API連結,「 .json 檔案」形式不能傳參。 |
帳號密碼 | 用於輸入認證資訊,允許為空,僅支援Authorization:Basic Base64(username:password)形式的認證 |
快取有效期 | 用於設定快取的有效期,單位毫秒,預設為0,表示不快取; 設定快取時間後,將在首次連結後進行快取(支援叢集),快取有效期內讀取的結果均為快取內容,不隨請求API資料變化而變化 |
請求類型 | 用來設定不同的請求類型,並根據不同的請求類型進行傳參設定 請求類型預設為 GET,可修改為 POST_FROM 及 POST_RAW ,關於請求類型的介紹可參見本文 3.3 節。 |
普通參數 | 普通參數即放在 Body 中的,通常說的 GET 和 POST 即普通參數 普通參數支援參數的增刪改,並可透過重新整理按鈕直接重新整理出請求地址中設定的參數(此時將用重新整理出的參數改寫原有的參數設定) |
頭參數 | 頭參數即放在 Header 中,常用不變的量一般都是走 header, 因為每次請求都帶 header 請求頭參數僅支援手動增刪改,公式支援除報表函式和儲存格計算以外的所有公式 |
編碼 | 如果檔案是非 UTF-8 編碼的,就需要在原始編碼這一欄選擇對應的編碼,否則無法正確的解析正文資訊 |
注1:V9.3.3 版本的插件,腳本引擎支援自主選擇 JavaScript V8 或者 Java(預設),在無法支援 JavaScript V8 的機器上自動使用 Java 版本的腳本引擎。
注2:新增參數類型取決於使用者伺服器需要接收什麼類型的參數。
3.2 JSON資料集取數
設計器建立 JSON 資料集,如下圖所示:
3.2.1 取出所有資料
點選建立好的 JSON 資料集編輯按鈕,輸入查詢語句,即可獲取到 JSON 中的資料。查詢語句欄輸入$.store.book[*],查詢出書店中所有的書資訊,如下圖所示:
注:$.store.book[*] 是 JSON 的固定引用方式,代表取出 store 下 book 的全部資料。
點選「預覽」按鈕,查看取出來的 JSON 資料。
鍵排序:是指對獲取出來的列名做排序,預設即為不開啟(如果是不完整的json結構,需要同時開啟預讀列名才有效)
預讀列名:先遍曆所有的資料,把列名獲取出來,可用於 JSON 結構不整齊的情況,會稍微的降低效率。預設即為不開啟。
3.2.2 取其中某一欄
查詢語句欄輸入$.store.book[*].category,取出 category 列的資料。
點選預覽按鈕,查看取出來的 JSON 資料。
3.2.3 條件取數
查詢語句欄輸入$.store.book[?(@.price<10)]取出價格小於 10 的書籍。
點選預覽按鈕,查看取出來的 JSON 資料。
注1:鍵值對順序不一緻可能造成資料錯亂,可以開啟預讀列名。
注2:已完成範本參見下面的 JSON 資料集範例1.cpt。
3.3 傳參方式介紹
傳參方式差別
模式 | 傳遞方式 |
---|---|
GET | 連接到 URL 上 |
POST_FORM | 需要傳的是 key-value,可以新增動態參數 |
POST_RAW | 只要 value 就可以了,可以新增動態參數 |
注1:建議使用者獲取參數時地址使用單純的API連結,「 .json 」檔案形式不支援傳參。
注2:在決策報表中,如果希望JSON資料連結和元件聯動,必須在JSON資料集中新增和JSON資料連結中同名的參數(即使用不上這個參數)。
注3:JSON資料集傳參,參數值必須為固定值,而不可以是另一個參數,例如fine_username等。
3.3.1 GET 傳參
新增「json」資料集,輸入查詢語句,傳回參數 book 對應的資料
3.3.4 POST_RAW 傳參
由於 POST_RAW 傳參需要手動指定參數,所以在請求頭參數中,設定 Content-Type 為 application/json ,表示用戶端告訴伺服器實際傳送的資料類型為 JSON 格式。
建立 JSON 資料連結,請求類型選擇「POST_RAW」。在地址處輸入對應的 json 正文API連結。如下圖所示:
4. JSON程式資料集
使用 JavaScript 腳本,將 JSON 物件轉換為二維表。這種方式可以解決所有不能直接用 JSON 資料集的場景,可以根據使用者自己的資料結構客製腳本,進而實現和報表的對接。
注: 建立和使用 JSON 程式資料集,設計器需要使用 2019-03-13 及以後版本的 JAR 包,插件需要更新到 9.2.3 及以後版本。
4.1 建立JSON程式資料集
設計器中建立 JSON 程式資料集,如下圖所示:
4.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))
4.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.4 取出其中某一欄
腳本編輯框中如下腳本程式碼,取出所有書籍的作者集合。
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 資料。
注:已完成範本參見下面的 JSON資料集範例2.cpt。
5. 效果預覽
JSON資料集範例1.cpt:
JSON資料集範例2.cpt:
注:PC 及其行動端效果一緻,可依據實際需求選擇對應的資料集。