0

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

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

我想生成一个具有以下结构的json:

[
   {year:2015,
        users[
             {
              user:"Ana"
              created: 4
             },
             {
              user:"Pedro"
              created: 7
              }
             ]},
    year:2016,
        users[
             {
             user:"Ana"
             created: 4
             },
             {
             nombre:"Pedro"
             created: 7
             }
            ]}
]

我用“Modified Java Script Value”创建了一个修改,我有几个疑问,我想为每年和每个用户检查一个数组,但我看到在下面的数据中只有我可以将它保存为:NUMBRE、STRING、DATA ,布尔值,整数,BIGNUBER,二进制,时间戳,互联网地址。

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

4

2 回答 2

1

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

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

我也尝试使用 End 脚本,但它只在最后一行之后运行,所以我不再有输出行了。相反,我在 Javascript 步骤之前在 Stream 中放置了 Detect Last Row以标记最后一行。

这在启动脚本中:

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);
}
于 2017-04-27T16:03:45.977 回答
0

可以使用Json Input/Ouput,数据量大时不建议使用javascript步骤,最好使用kettle自带的步骤或者用户自定义的java类,问候

于 2017-05-10T20:02:15.080 回答