Pentaho JavaScript JSON - 基于键将 json 对象连接到现有的 JSON 文档中
Posted
技术标签:
【中文标题】Pentaho JavaScript JSON - 基于键将 json 对象连接到现有的 JSON 文档中【英文标题】:Pentaho JavaScript JSON - Concatenate json objects into existing JSON document based on keys 【发布时间】:2018-10-04 19:07:04 【问题描述】:基本上我要做的是建立一个 Json 文档,它的所有片段都散布成更小的 Json 片段,所有行都包含在正确的 json 结构中插入较小的 Json 位所需的键。
我的问题开始于我对 javascript 几乎一无所知。所以我必须从头开始学习 JavaScript(已经在学习),所以我会尽我所能描述这个问题以及我想要实现的目标。
问题:在每个 Pentaho / Json 帖子中,我看到一个硬编码(如 This 答案,这很有帮助,但同样是硬编码的字段数)JavaScript 来构建预先形成的 Json 结构,我需要的是一种方法将动态构建的信息插入/创建到 Json 结构中。它还需要嵌套结构。
所以,一开始我会批量构建所有 Flat Json 结构,这可以通过 Json 输出步骤轻松完成,由于它输出构建的 Json 对象,因此可以动态构建对象本身,然后只需串联(我再次不知道这是否可能)。 平面部分完成后,就是在正确结构中连接其他对象的部分,有些只是更普通的对象,有些是对象数组(嵌套部分)。
这是我需要了解这部分的人确认可以在 Pentaho JavaScript 中实现的地方,或者使用 Pentaho 的唯一方法是构建硬编码结构。下面我将在 Json 示例中展示我想要的内容。
这将是 Flat JSON 的一个示例:
"Apolices": [ "Apolice": "APO_numero_apolice": "1321635113", "APO_ramo": "312", "APO_data_proposta": "22-05-2018", "APO_valor_desconto": 0.0, "APO_valor_liquido": 1550.39, "APO_cod_parceiro_negocio": "1000", "APO_inicio_vigencia": "22-05-2018", "APO_status_apolice": "EMITIDA" , "Apolice": "APO_proposta": "3212121", "APO_data_registro": "08-08-2018", "APO_numero_apolice": "7891321498", "APO_ramo": "515", "APO_data_proposta": "22-03-2018", "APO_valor_desconto": 0.0, "APO_valor_liquido": 2150.72, "APO_cod_parceiro_negocio": "7548151100", "APO_inicio_vigencia": "22-07-2018", "APO_status_apolice": "EMITIDA", "APO_produto": null, "APO_codigo_corretor": "812182", "APO_fim_vigencia": "22-05-2019", "APO_valor_bruto": 2320.8, "APO_percentual_comissao": 19, "APO_iof": null ]
然后在所述实施过程中,期望的结果将是:
"Apolices": [ "Apolice": "APO_numero_apolice": "1321635113", "APO_ramo": "312", "APO_data_proposta": "22-05-2018", "APO_valor_desconto": 0.0, "APO_valor_liquido": 1550.39, "APO_cod_parceiro_negocio": "1000", "APO_inicio_vigencia": "22-05-2018", "APO_status_apolice": "EMITIDA" , "Item": "ITE_ano_fabricacao": "2001", "ITE_modelo": "FOCUS SEDAN GHIA 2.0 MPI 16V 4P", "ITE_ano_modelo": "2001", "Cobertura": [ "COB_cod_cobertura": "21", "COB_valor_importancia": "50000", "COB_valor_premio": "415,71", "COB_cobertura": "RCF-V - Danos Materiais" , "COB_cod_cobertura": "17", "COB_valor_importancia": "16712", "COB_valor_premio": "1165,96", "COB_cobertura": "Colisão,Incêndio e Roubo\/Furto" ] , "Apolice": "APO_proposta": "3212121", "APO_data_registro": "08-08-2018", "APO_numero_apolice": "7891321498", "APO_ramo": "515", "APO_data_proposta": "22-03-2018", "APO_valor_desconto": 0.0, "APO_valor_liquido": 2150.72, "APO_cod_parceiro_negocio": "7548151100", "APO_inicio_vigencia": "22-07-2018", "APO_status_apolice": "EMITIDA", "APO_produto": null, "APO_codigo_corretor": "812182", "APO_fim_vigencia": "22-05-2019", "APO_valor_bruto": 2320.8, "APO_percentual_comissao": 19, "APO_iof": null ]
“Item”和“Cobertura”等的 Json 对象将作为已构建的 Json 对象出现,并带有将整个对象插入到结构的正确位置所需的键。
由于我仍在学习 JavaScript,所以我自己几乎没有编写过任何代码,但我已经知道 Pentaho 的 JavaScript 在资源上有些有限,这就是为什么我提前询问在 Pentaho 中这是否可能/水壶
【问题讨论】:
我会说是的,因为它不是没有对象的 js ... 【参考方案1】:不要害怕 PDI 中 Javascript 的资源限制。它使用了官方的Rhino OpenSource 项目,100% 兼容 ES6。
当然,JS 的动态特性让它慢了一点,但我认为差异不会很大,除非你有每分钟数百万的连续输入流。
【讨论】:
100% ES6 兼容,从哪个版本开始?我们在这里使用 7.0,但对于任何其他版本都可以轻松升级。 从一开始,我认为是V4.7。事实上,PDI 使用的是 Rhino,它是 Firefox 使用的 javascript。要更新它,请下载最后一个 Rhino,解压 js.jar,将其放入 lib 文件夹(在您的 spoon.bat 或spoon.sh 旁边),然后重新启动您的 PDI。您将拥有与浏览器上使用的完全相同的 javascript。以上是关于Pentaho JavaScript JSON - 基于键将 json 对象连接到现有的 JSON 文档中的主要内容,如果未能解决你的问题,请参考以下文章