我正在使用Eclipse Birt從JSON文件生成報(bào)告.
我的JSON文件如下所示:
{ "cells":[ { "type":"basic.Sensor", "custom":{ "identifier":[ { "name":"Name1", "URI":"Value1" }, { "name":"Name4", "URI":"Value4" } ], "classifier":[ { "name":"Name2", "URI":"Value2" } ], "output":[ { "name":"Name3", "URI":"Value3" } ], }, "image":{ "width":50, "height":50, "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABEJAAARCQBQGfEVAAAABl0RVh0U29mdHdhcmUAd3Vi8f k/EREURQtsda2Or/ nFLqP6T5Ecdi0aJFL85msz2Qxyf4JIumMAx/ClmWt23GmL1kO54CXANAVH WiN4Sx7EoNVkU3Z41BDHMeXAxjvOxNr7RJjzHX7S/jAflwBxkJr/RwiOpWZ883Nzd Wpld7tkBr/SJr7ZHZbHZeuVweSnPfniocMAWYwcGBafH0OoPamFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY4ZBZjmmFGAaY7/B94QnX08zxKLAAAAAElFTkSuQmCC" } } }, { "type":"basic.Sensor", "custom":{ "identifier":[ { "name":"Name1", "URI":"Value1" }, { "name":"Name4", "URI":"Value4" } ], "classifier":[ { "name":"Name2", "URI":"Value2" } ], "output":[ { "name":"Name3", "URI":"Value3" } ], }, "image":{ "width":50, "height":50, "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9igAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIACKABAAACAAigAQAAAgAIoAEAAAIADqhvprADeSsau00l5NAAAAAElFTkSuQmCC" } } }, { "type":"basic.Platform", "custom":{ "identifier":[ { "name":"Name1", "URI":"Value1" } ], "classifier":[ { "name":"Name2", "URI":"Value2" } ], "output":[ { "name":"Name3", "URI":"Value3" } ], "image":{ "width":50, "height":50, "xlink:href":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAA6TH0jqtg6U8EsCdnm3SpevSK7Pb85xABEMBuLAn2hxjRve7SFzYEaB/HhytLQ4ABRwCWBPvBKnRk6U8EkBeOD9f7iwAGHAGEYEmwDxLvzNKfCCDP8NGLQd3lY7D0JwI4kmlwfHhX6dTSXxsRAAHsWR7aUjc7uM5Wg==" } } }] }
我有3個(gè)單元格,每個(gè)單元格包含1個(gè)圖像1個(gè)名稱(chēng)1個(gè)類(lèi)型和3個(gè)表,這是我到目前為止所做的:
我正在努力做的是一個(gè)嵌套循環(huán),我想為JSON中的每個(gè)object(Cell)都加上一個(gè)這樣的段落:
> 2.x組件單元的名稱(chēng):
>圖片
>輸出表
>標(biāo)識(shí)符表
>分類(lèi)表
因此,要做到這一點(diǎn),我需要在每個(gè)單元格上進(jìn)行迭代,然后在每個(gè)表上進(jìn)行迭代,輸出,標(biāo)識(shí)符和分類(lèi)器,而且我不知道如何執(zhí)行此操作,即嵌套循環(huán).類(lèi)似于表示單元格數(shù)量的列表,其中包含3個(gè)表,一個(gè)圖像和一個(gè)名稱(chēng).
**編輯:**
這是數(shù)據(jù)集的開(kāi)放方法
// Grab the JSON file and place it in a stringfisTargetFile = new FileInputStream(new File("C:/Users/Sample Reports/moe.json"));input = IOUtils.toString(fisTargetFile, "UTF-8");// Store the contents in a variablejsonData = input;// Convert the String to a JSON objectmyJSONObject = eval( '(' jsonData ' )' );// Get the length of the objectlen = myJSONObject.cells.length;// Countercount = 0;
提取方法:
if(count < len) {var name = myJSONObject.cells[count].attrs.text["text"];var type = myJSONObject.cells[count].type;var icon =myJSONObject.cells[count].attrs.image["xlink:href"];icon = icon.split(",");icon= icon[1];imageDataBytes = icon;row["name"] = name;row["type"] = type;row["icon"] = Base64ToBlob.toBytes(icon);Logger.getAnonymousLogger().info( row["icon"]);count ;return true;}return false;
解決方法:
您想使用嵌套表,有一個(gè)很好的教程,展示了如何將嵌套表鏈接到外部表:請(qǐng)先watch carefully this demo,尤其要了解如何通過(guò)數(shù)據(jù)集參數(shù)將子表鏈接到外部表.
當(dāng)然,您的案例更具挑戰(zhàn)性,因?yàn)槟枰褂媚_本化數(shù)據(jù)集和多個(gè)子表來(lái)執(zhí)行此操作.我已經(jīng)做了類(lèi)似的事情,您必須為每個(gè)子表創(chuàng)建一個(gè)腳本化數(shù)據(jù)集.關(guān)鍵點(diǎn)是:
>在每個(gè)子數(shù)據(jù)集的“參數(shù)”部分中,創(chuàng)建一個(gè)輸入?yún)?shù)并將其命名為實(shí)例“ systemID”
>通過(guò)“拖放”外部表中的每個(gè)數(shù)據(jù)集來(lái)創(chuàng)建子表
>在每個(gè)子表的“綁定”部分中,將參數(shù)“ systemID”鏈接到外部表的ID字段
>在子數(shù)據(jù)集的“打開(kāi)”事件中,使用以下表達(dá)式訪(fǎng)問(wèn)參數(shù)的值:inputParams [“ systemID”]這樣就可以過(guò)濾“ myJSONObject”中的相關(guān)行.
>確保將“ myJSONObject”全部初始化一次非常重要,否則,如果在每次迭代中對(duì)其進(jìn)行評(píng)估,性能可能會(huì)大大降低.例如,在報(bào)告的“初始化”事件中對(duì)其進(jìn)行評(píng)估.
就是這樣,這并不容易,但是這些要素應(yīng)該有助于實(shí)現(xiàn)此報(bào)告.
來(lái)源:https://www.icode9.com/content-1-567801.html