Flowgear 数据转换。我想获得有关如何转换数据的更多信息

问题描述 投票:0回答:1

假设我的输入如下:

[
  { "name": "Archer" },
  { "name": "Cyril"  },
  { "name": "Pam"    }
]

我想得到输出为

[
  { "id": 1, "name": "Archer" },
  { "id": 2, "name": "Cyril"  },
  { "id": 3, "name": "Pam"    }
]

我们可以使用每个节点循环遍历所有对象来做到这一点,如果我有一个很长的脚本并且我需要对每个节点使用不同的脚本,该怎么办?在这种情况下,这是不可行的。 javascript中有没有像map这样的函数。

谢谢,

integration flowgear
1个回答
0
投票

此类操作的最佳节点是

Quickmap
节点,但实现此目的的方法取决于您想要通过目标
json
主体中递增的 ID 实现的目标。

如果您想为

element
中的每个
array
从 1 开始数,那么您可以尝试以下操作。

您需要为源有效负载进行额外的嵌套,以便我们可以使用

INDEXOF()
函数来索引数组中的每个
element
,如下所示:

首先我要添加提到的嵌套。我将这篇文章中的原始正文传递到 Formatter 节点上的

Body
属性,并且 Formatter 的
Result
正在传递到 Quickmap 节点的
Source
中。

我从格式化程序节点复制了

Result
,然后向每个
id
添加了
element
字段,并将其粘贴到 Quickmap 节点中的
Target
负载中。 Quickmap 映射如下所示:

在上面您将看到我将第二个

container
Source
映射到我的
id
Target
字段,然后我使用
INDEXOF()
函数对
id
字段中的每个元素进行索引。我还在映射表达式中添加了“+1”,以便它可以从 1 开始。

从这里您可以使用带有一些

Script
C#
节点来摆脱我们需要的额外嵌套。

如果您需要 ID 来记住最后一个 ID 是什么,并且需要它从工作流程的最后一个实例停止的位置进行索引,我建议您使用 Flowgear

Key Values
来跟踪最后一个 ID。

在这个例子中,我使用了与上面相同的工作流程,并对其进行了修改以保存工作流程最后一次执行的最大ID。

现在,我的工作流程开始处有一个

Get Key Value
节点,末尾有一个
Set Key Value
节点。在这里,我需要创建一个
Group
来跟踪键值以及
Key
Group
来自
Variable Bar
,并且
Key
被硬编码在“获取和设置键值”节点上(在屏幕截图中以红色显示)。您可以决定这些应该来自哪里。

当此示例工作流程首次运行时,我们不会设置任何键值,因此这就是为什么我将

Missing
节点的
Get Key Value
属性连接到仅保存硬编码
0 的占位符格式化程序节点
用于将传递到 Quickmap 节点的第一次运行。运行一次后,它会将 ID 设置为我的 Quickmap 中的最大 ID 到键值存储中,以供将来运行时访问。

对于未来的运行,工作流程将进入

Found
属性,并且可以将其传递到要使用
GETVALUE()
访问的 Quickmap 属性中,以便我们可以与 Quickmap 节点外部的值进行交互。我打电话给我的
LastId
。我还在
CurrentMaxId
负载中添加了一个
Result
字段,位于
Root
容器下方。

然后可以更改 Quickmap 映射,如下所示:

在 Quickmap 上完成此操作后,您可以将

CurrentMaxId
传递到
Value
节点上的
Set Key Values
,以便可以为下一次运行进行设置。

© www.soinside.com 2019 - 2024. All rights reserved.