Postgres到Json。Pentaho 7.0(数据集成)

Postgres到Json。Pentaho 7.0(数据集成),pentaho,pentaho-data-integration,Pentaho,Pentaho Data Integration,我对postgres数据库进行查询,并带来两个字段,“USER”和“CREATED”(日期) 我从创建日期提取年份,然后遍历记录,并根据年份和用户创建新的json对象 我想生成一个json,其结构如下: [ {year:2015, users[ { user:"Ana" created: 4 }, { user:"

我对postgres数据库进行查询,并带来两个字段,“USER”和“CREATED”(日期)

我从创建日期提取年份,然后遍历记录,并根据年份和用户创建新的json对象

我想生成一个json,其结构如下:

[
   {year:2015,
        users[
             {
              user:"Ana"
              created: 4
             },
             {
              user:"Pedro"
              created: 7
              }
             ]},
    year:2016,
        users[
             {
             user:"Ana"
             created: 4
             },
             {
             nombre:"Pedro"
             created: 7
             }
            ]}
]
我用“修改过的Java脚本值”创建了一个修改,我有几个疑问,我想为每年和每个用户检查一个数组,但我看到在下面的数据中,只有我可以将其保存为:NUMBRE、STRING、data、BOOLEAN、INTEGAR、BIGNUBER、BINARY、TIMESTAMP、internetaddress


我不知道如何使用对象中的数组和对象生成json。

您可以使用标准Javascript创建并添加到json对象,然后在将其输出到流时将其转换为字符串

变量存在的时间与步骤运行的时间相同,因此您可以在单独的“开始脚本”选项卡中声明它们,然后为每一行添加它们。这不是一个非常明显的函数,但您可能已经意识到了它。右键单击“开始”选项卡旁边以创建新选项卡。右键单击选项卡,将其设置为“开始脚本”(在第一行之前运行)或“转换”脚本(为每行运行)

我也尝试过使用一个结束脚本,但它只在最后一行之后运行,所以我再也没有输出行了。相反,我在Javascript步骤之前放置了一个检测流中的最后一行,以标记最后一行

这在开始脚本中出现:

var jsonDoc = []; //create array
var jsonOutput = "default"; // this will be the output string
var currentYear = 0;
在转换脚本中:

if (currentYear < YearField) {
    // year changed, add the previous one to the main array
    if (currentYear > 0) { jsonDoc.push(oneYear); }
    currentYear = YearField;
    // set up the new year
    var oneYear = {};
    oneYear.year = YearField;
    oneYear.users = [];  
}

// add the user to the current year array 
var oneUser = {};
oneUser.user = UserField;
oneUser.created = CreatedField;
oneYear.users.push(oneUser);

// At the last row, add the current year and 
//create the string variable that will be your output field
if (LastRow==true) {
    jsonDoc.push(oneYear);
    jsonOutput = JSON.stringify(jsonDoc);
}
if(当前年份0){jsonDoc.push(一年);}
currentYear=YearField;
//迎接新年
var oneYear={};
oneYear.year=YearField;
oneYear.users=[];
}
//将用户添加到当前年度数组
var oneUser={};
oneUser.user=UserField;
oneUser.created=CreatedField;
一年。用户。推送(一个用户);
//在最后一行,添加当前年份和
//创建将作为输出字段的字符串变量
if(LastRow==true){
jsonDoc.push(一年);
jsonOutput=JSON.stringify(jsonDoc);
}

您可以使用Json输入/输出,当您有大量数据时,不建议使用javascript步骤,最好使用默认情况下Ketter带来的步骤或用户定义的java类,您可以在结束脚本中调用
putRow(outRow)
函数来生成最后一行。该函数接受一个数组,将输出行表示为一个参数。您可以使用
outRow=createRowCopy(getOutputRowMeta().size())
复制输入行,然后设置附加字段,例如:
outRow[getOutputRowMeta().size()-1]=\u步骤u.getValueFromJScript(jsonOutput,1)