Postgres Json。 Pentaho 7.0(数据集成)
Postgres to Json. Pentaho 7.0 ( Data Integration)
我查询了一个 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" 创建了一个修改,我有几个疑问,我想为每年和每个用户遍历一个数组,但我在下面的数据中看到只有我可以保存它 as:NUMBRE、字符串、数据、布尔值、整数、BIGNUBER、二进制、时间戳、互联网地址。
我不知道如何使用对象中的数组和对象生成我的 json。
您可以使用标准 Javascript 创建并添加到 JSON 个对象,然后在将其输出到流时将它们转换为字符串。
只要步骤运行,变量就会存在,因此您可以在单独的启动脚本选项卡中声明它们,然后为每一行添加它们。这不是一个非常明显的功能,但您可能已经意识到它。右键单击起始选项卡旁边以创建一个新选项卡。右键单击选项卡将其设置为 "Start Script"(在第一行之前运行)或 "Transform" 脚本(在每一行运行)。
我也尝试使用 End 脚本,但它只在最后一行 之后运行,所以我不再有输出行了。相反,我在 Javascript 步骤之前放置了 Detect Last Row in Stream 以标记最后一行。
这进入启动脚本:
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);
}
可以使用JsonInput/Ouput,java脚本步骤在数据量大的时候不推荐,最好使用kettle默认自带的步骤或者用户定义 java class,问候
我查询了一个 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" 创建了一个修改,我有几个疑问,我想为每年和每个用户遍历一个数组,但我在下面的数据中看到只有我可以保存它 as:NUMBRE、字符串、数据、布尔值、整数、BIGNUBER、二进制、时间戳、互联网地址。
我不知道如何使用对象中的数组和对象生成我的 json。
您可以使用标准 Javascript 创建并添加到 JSON 个对象,然后在将其输出到流时将它们转换为字符串。
只要步骤运行,变量就会存在,因此您可以在单独的启动脚本选项卡中声明它们,然后为每一行添加它们。这不是一个非常明显的功能,但您可能已经意识到它。右键单击起始选项卡旁边以创建一个新选项卡。右键单击选项卡将其设置为 "Start Script"(在第一行之前运行)或 "Transform" 脚本(在每一行运行)。
我也尝试使用 End 脚本,但它只在最后一行 之后运行,所以我不再有输出行了。相反,我在 Javascript 步骤之前放置了 Detect Last Row in Stream 以标记最后一行。
这进入启动脚本:
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);
}
可以使用JsonInput/Ouput,java脚本步骤在数据量大的时候不推荐,最好使用kettle默认自带的步骤或者用户定义 java class,问候