在Java中輔助報表工具展現json

  JSON是半結構化數據,Java和報表工具只提供了簡單解析的類庫,很難進行深度計算。而使用集算器可降低JSON的計算難度。報表工具可將集算器腳本文件當做數據庫存儲過程執行,傳入參數並用JDBC獲得返回結果,詳情參考集算器輔助報表工具的應用過程

  下面舉例說明報表工具呈現JSON時常見的難題,以及集算器對應的解法。

  JSON分組彙總

  order.json存儲着訂單記錄,現在要按時間段彙總每個月每個客戶貢獻的銷售額,部分源數據如下:


  集算器代碼:


  將JSON文件讀爲二維表,進行性條件查詢,再進行分組彙總,其中argBegin、argEnd是報表參數。結果如下:


  用列表展現手機日誌

  文件cellphone.log是JSON格式的手機日誌,其中general和ping字段是子文檔,分別有一條記錄,cap_main字段也是子文檔,有多條記錄,現在需要用列表呈現cap_main,每條記錄附加general的mtmodel 、networktype字段,以及ping的ssid字段。

  源數據如下:

  集算器代碼:


  集算器讀入JSON文件後,將保持其多層結構,並可用句號延多層結構訪問字段。函數derive表示增加計算列。計算結果如下:


  報表查詢JSON多層子文檔

  jsonstr.json的runners字段是子文檔,子文檔有3個字段:horseId、ownerColours、trainer,其中trainer含有下級字段trainerId。報表需要根據文檔序號展現對應子文檔的horseId、ownerColours、trainerId字段。

  源數據如下:

  集算器代碼:


  讀入JSON文件,按序號取出對應文檔的runner字段(子文檔),再從runner取出需要的字段,其中trainerId來自下級子文檔。A3就是報表需要的數據,如下:


  多層JSON分組表

  Cells.json是個多層嵌套的json文件,報表需要將其展示爲分組表,分組字段爲name、type、image. “xlink:href”,明細字段分爲3個部分:custom. Identifier、custom. Classifier、custom. Output,這3部分都是結構相同的子文檔,但文檔數不同。

  源數據:

  集算器代碼:


  集算器可將3種子文檔合併在1個二維表中,用新字段ctype來區分,再將分組字段加入二維表,形成典型的“主子連接表”。合併後A2如下:


  根據集算器的計算結果,報表很容易就可以設計出分組表。

  多個子報表不同JSON

  一張報表含有多個子報表,主報表和每個子報表使用不同的JSON文件,部分源數據如下:

  對於Jasper、Birt等單源報表工具,需要用JAVA類將多源數據統一爲單源,集算器只需書寫簡單腳本:


  讀入JSON並取出第1個字段,“.#1”表示第1個字段。給參數argFileName賦予不同的文件名,報表將會收到不同的數據集,如下:


  連接txt和JSON

  structure.txt是tab分割的結構化文本,json.txt是非結構化的JSON串,structure.txt的第2列和json.txt的部分文本存在外鍵關係。部分數據如下:

  structure.txt

  Json.txt


  需要用報表呈現上述連接關係,期望表樣如下:


  集算器代碼:


  讀入JSON文件,取出必要的字段和子文檔形成二維表,然後新增計算列。A3如下:


  之後讀入本文文件,再和A3進行join運算,並取出需要的字段,形成最終結果A6,如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章