Mysql 如何创建动态json数据以命中rest客户端

Mysql 如何创建动态json数据以命中rest客户端,mysql,etl,pentaho,pentaho-data-integration,pdi,Mysql,Etl,Pentaho,Pentaho Data Integration,Pdi,我是数据集成工具Pentaho的初学者 我的数据库表将所有列放在一起。现在我想从该表数据创建一个JSON,以便访问我的REST客户机 我的REST客户端像这样接受JSON,所以我需要准备同样的内容 { "firstName" : "xyz", "lastName" : "sdf", "birthDate" : "1977-07-07", "email" : "hj@dev4life.com", "phones" : [ { "number" : "123456",

我是数据集成工具Pentaho的初学者

我的数据库表将所有列放在一起。现在我想从该表数据创建一个JSON,以便访问我的REST客户机

我的REST客户端像这样接受JSON,所以我需要准备同样的内容

{
 "firstName" : "xyz",
  "lastName" : "sdf",
  "birthDate" : "1977-07-07",
  "email" : "hj@dev4life.com",
  "phones" : [ {
    "number" : "123456",
    "phoneType" : "PRIMARY"
  } ]
}


从表格数据结构创建JSON的最佳方法是通过Javascript步骤。JSON输入的工作方式是相反的:给定一个JSON数据字段,提取单个值。

您几乎完成了JSON输出步骤。问题在于JSON输出步骤不能很好地处理嵌套的数据结构,因此您可能希望分别处理
phones
和其他信息,然后合并结果

以下是处理任务的KTR示例:


JSON输出步骤:处理电话 在第一个JSON输出步骤中,设置以下内容

字段选项卡
下,添加两个字段:
数字
电话类型
。此步骤后的新字段
phones
为:

{"phones":[{"number":123456.0,"phoneType":"PRIMARY"}]}

JSON输出步骤: 执行与上述步骤类似的操作,但以下操作除外:

  • General选项卡中,设置Json bloc name=
    data
    ,Output Value=
    outputValue
  • 字段选项卡中,添加字段
    出生日期
    电子邮件
在此步骤中添加的名为
outputValue
的新字段是:

{"data":[{"firstName":"himanshi","lastName":"joshi","birthDate":"1997-07-24","email":"hj@test.com"}]}
注意:您不应该在此处检索电话并将其添加到JSON输出中,因为嵌套数据结构将在最终输出中成为单个字符串值


JSON输入步骤:检索$.data[0] 如步骤名称中所示,我们使用JSON输入步骤从字段
outputValue
检索$.data[0],因此它变成:

{"firstName":"himanshi","lastName":"joshi","birthDate":"1997-07-24","email":"hj@test.com"}
  • 文件选项卡中:选择
    源来自上一步
    并选择字段=
    输出值
  • 在字段选项卡中,添加一个新字段:Name=
    rest\u client\u data
    和Path=
    $.data[0]

在字符串步骤中替换:合并电话 使用
Replace in string
步骤合并两个JSON字符串:
phones
rest\u client\u data

基本上,它用一个逗号替换手机的前大括号
{
,然后用更新的
手机
替换剩余客户数据的后大括号
}


选择值步骤 仅保留所需字段:
rest\u client\u数据

{"firstName":"himanshi","lastName":"joshi","birthDate":"1997-07-24","email":"hj@test.com","phones":[{"number":123456.0,"phoneType":"PRIMARY"}]}

欢迎来到SO。请澄清,你的问题是什么?嗨@Dmitry Popov我的问题是你的表中有一些数据,例如姓名:没有关系的雇员雇员姓名雇员地址1雇员城市雇员密码如果我使用pentaho的直接jsoninput选项,我得到的json如下{“数据”:[{“雇员姓名”:“sam”,“employee_addresline1”:“CB-124 street lory”,“employee_city”:“NY”,“employee_pincode”:“15585”}我可以使用数据值来加热我的rest客户端,但是我需要这样的json{“employee_name”:“sam”,“address”:{“employee_addresline1”:“CB-124 street lory”,“employee_city”:“NY”,“employee_pincode”:“15585”}对于复杂的JSON结构,最好使用修改后的Java脚本值步骤。在Pentaho Javascript中使用迭代器时要小心,迭代器的工作原理是一样的,但它们的“执行”不一样。嗨,如果您觉得有答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将重点放在较老的SO w上他仍然没有答案。