JSON資料集

1. 概述

1.1 版本

報表伺服器版本
JSON資料集插件
11.0V9.5.7
11.0.8V9.5.8
11.0.10V9.5.9

1.2 應用場景

隨着 JavaScript 的流行,JSON 格式的資料也被越來越廣泛的使用。使用 JSON 資料集插件可以將 JSON 格式的資料轉變為報表中可以使用的資料表。

1.3 文法規則

JSON 查詢的詳細文法規則參見文檔:JsonPath

注:JsonPath文法內寫參數的方法,與普通資料集一緻。

1.4 方案對比

對比項當前方案新方案
方案簡介本文方法,在 FineReport 中下載「JSON 資料集」插件實現

本文不做介紹

使用 FineDataLink 產品 中的「JSON 解析」算子實現

主要實現程式

需要提前學習 JSON 查詢的文法

建立 JSON 資料集後,輸入查詢語句,取出資料


「JSON 解析」算子中,無需輸入查詢語句,直接視覺化選擇節點即可

2. 安裝插件

點選下載插件:JSON資料集

插件安裝方式,可參考A11-18伺服器-插件管理

3. JSON資料集

3.1 定義 JSON 資料連結

1)準備範例json

帆軟不提供線上json除錯,僅提供本文範例json檔案:book.zip

請將book.json檔案上傳至你自己的伺服器,生成可線上存取的連結 。

2)建立資料連結

設計器菜單欄選擇伺服器>定義資料連結,建立一個 JSON 資料連結,命名為 JSON 。

輸入連結地址,並按如下圖所示配置好其他設定項,點選「確定」。如下圖所示:

注:請求地址傳回的正文資訊,只要是 JSON 格式的正文即可。

21.gif

設定項的詳細說明如下圖所示:

   設定項  含義
地址

用於輸入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 連結,請求類型選擇「GET」,在 json 正文的請求地址後面加上新增參數,如下圖所示:

3.gif

新增「json」資料集,輸入查詢語句,傳回參數 book 對應的資料


3.3.4 POST_RAW 傳參

由於 POST_RAW 傳參需要手動指定參數,所以在請求頭參數中,設定 Content-Type 為 application/json ,表示用戶端告訴伺服器實際傳送的資料類型為 JSON 格式。

建立 JSON 資料連結,請求類型選擇「POST_RAW」。在地址處輸入對應的 json 正文API連結。如下圖所示:

4.gif

預覽時,傳回參數 book 對應的資料,如下圖所示:

使用動態參數時,透過 ${} 進行動態傳參,點選重新整理按鈕進行參數配置:

5.gif

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))
显示代码

7.gif

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 及其行動端效果一緻,可依據實際需求選擇對應的資料集。

6. 已完成範本

附件列表


主題: 資料準備
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

9s后關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙