BIRT 如何用 rest api 介面獲取 json 做報表

xiaohuihui發表於2020-06-17

BIRT中不能構建JSON資料來源,雖然一些開源社群提供瞭解析JSON資料來源外掛,但幾乎所有外掛都非常底層,並且使用起來很不方便,因此並不值得推薦。

BIRT的常規辦法是建立一個“指令碼資料來源”,在該指令碼源上連線到URL並自行解析結果,但指令碼寫起來非常麻煩,而且工作量很大。

比如要處理這麼個場景:根據傳入引數,呼叫REST API,返回巢狀的JSON資料,部分資料格式如下:

[

    {

        "id": 1000,

        "content": "It is too hot",

        "comment": [

            {

                "author": "joe",

                "score": 3,

                "comment": "just so so!"

            },

            {

                "author": "jimmy",

                "score": 5,

                "comment": "cool! good!"

            }

        ]

}

...

]

期望解析後的效果:

BIRT 如何用 rest api 介面獲取 json 做報表

BIRT使用open()方法建立指令碼化資料來源,如下所示:

...

importPackage(Packages.java.io);

importPackage(Packages.java.net);

var param= params["industryname"].value;

var inStream = new URL(" + param).openStream();

var inStreamReader = new InputStreamReader(inStream);

var bufferedReader = new BufferedReader(inStreamReader);

var line;

var result = "";

while ((line = bufferedReader.readLine()) != null)

result += line;

inStream.close();

var json = JSON.parse(result);

vars["HTMLJSON"] = json;

logger.warning (result);

...

建議使用集算器,它將HTTP服務的url串的返回結果封裝成檔案流,可直接解析JSON格式字串並結構化為序表。集算器精心設計了一套集合運算領域的函式庫,以應對結構化後的各類運算,比如分組、排序、過濾、聚合、連線等,不再需要第三方資料庫來協助。比如上面的問題,集算器指令碼只需3行:


A

1

=httpfile("http://yourapi/endpoint/servlet/testServlet?table=blog&type=json")

2

=json(file(A1).read())

3

=A2.news(comment;id,content,${A2.comment.fname().concat@c()})

最後將計算結果返回給BIRT的DataSet進行報表展現。從此示例來看,相比較於常規辦法,實現同樣的演算法只需更少的程式碼,分步執行除錯也方便。

其實還有很多類似的計算問題不太方便,但有集算器SPL的輔助卻很簡單,感興趣可以參考:

集算器提供了JDBC驅動,可以很方便的與BIRT等報表工具整合, 有使用和獲得它的方法。

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2698933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章