跳到主要内容

数据操作

Data Operations 组件用于对 Data 对象执行操作,包括提取、过滤以及编辑其中的键和值。 所有可用操作请参阅可用数据操作。 组件最终会输出一个新的 Data 对象,其中包含执行所选操作后的结果。

在流程中使用 Data Operations

下面的示例演示如何在流程中使用 Data Operations,并处理 webhook 负载中的数据:

  1. 创建一个包含 WebhookData Operations 的流程,并将 Webhook 的输出连接到 Data OperationsData 输入。

    Data Operations 的所有操作都要求至少接收一个来自其他组件的 Data 输入。 如果上游组件不产生 Data 输出,你可以先使用其他组件(例如 Type Convert 组件)把数据转换后再传进来。 或者,你也可以直接改用更适合原始数据类型的组件,例如 Parser 组件DataFrame Operations 组件

  2. Operations 字段中选择你希望对输入 Data 执行的操作。 本示例中请选择 Select Keys

    提示

    每次只能选择一种操作。 如果你需要连续执行多个操作,可以把多个 Data Operations 组件串起来逐步处理。 如果是更复杂的多步骤转换,也可以考虑使用 Smart Transform 组件 这类更灵活的组件。

  3. Select Keys 下为 nameusernameemail 添加键。 点击 Add more 可为每个键新增一个字段。

    在本例中,我们假设 webhook 接收到的负载始终包含 nameusernameemail 这几个键。 Select Keys 操作会从每个输入负载中提取这些键对应的值。

  4. 可选:如果你希望在 Playground 中看到结果,可将 Data Operations 的输出连接到 Chat Output 组件。

    A flow with Webhook, Data Operations, and Chat Output components

  5. 为了测试流程,可以向该流程的 webhook 端点发送如下请求。 更多说明请参阅通过 webhook 触发流程


    _26
    curl -X POST "http://$SKILLFLAW_SERVER_ADDRESS/api/v1/webhook/$FLOW_ID" \
    _26
    -H "Content-Type: application/json" \
    _26
    -H "x-api-key: $SKILLFLAW_API_KEY" \
    _26
    -d '{
    _26
    "id": 1,
    _26
    "name": "Leanne Graham",
    _26
    "username": "Bret",
    _26
    "email": "Sincere@april.biz",
    _26
    "address": {
    _26
    "street": "Main Street",
    _26
    "suite": "Apt. 556",
    _26
    "city": "Springfield",
    _26
    "zipcode": "92998-3874",
    _26
    "geo": {
    _26
    "lat": "-37.3159",
    _26
    "lng": "81.1496"
    _26
    }
    _26
    },
    _26
    "phone": "1-770-736-8031 x56442",
    _26
    "website": "hildegard.org",
    _26
    "company": {
    _26
    "name": "Acme-Corp",
    _26
    "catchPhrase": "Multi-layered client-server neural-net",
    _26
    "bs": "harness real-time e-markets"
    _26
    }
    _26
    }'

  6. 要查看 Select Keys 操作生成的 Data,可以使用以下任一方式:

    • 如果你接了 Chat Output,可以打开 Playground 以聊天消息形式查看结果。
    • 直接点击 Data Operations 组件上的 Inspect output

Data Operations 参数

很多参数会根据当前选定的 Operationoperation)动态出现。

NameDisplay NameInfo
dataData输入参数。要操作的 Data 对象。
operationOperation输入参数。要对数据执行的操作。详见可用数据操作
select_keys_inputSelect Keys输入参数。要从数据中提取的键列表。
filter_keyFilter Key输入参数。用于过滤的键。
operatorComparison Operator输入参数。比较值时采用的运算符。
filter_valuesFilter Values输入参数。用于过滤的值列表。
append_update_dataAppend or Update输入参数。要追加或更新到现有数据中的内容。
remove_keys_inputRemove Keys输入参数。要从数据中移除的键列表。
rename_keys_inputRename Keys输入参数。要重命名的键列表。
mapped_json_displayJSON to Map输入参数。用于选择路径的 JSON 结构。仅适用于 Path Selection 操作。更多说明见Path Selection 操作示例
selected_keySelect Path输入参数。用于提取值的 JSON 路径表达式。仅适用于 Path Selection 操作。更多说明见Path Selection 操作示例
queryJQ Expression输入参数。用于高级 JSON 过滤与转换的 jq 表达式。仅适用于 JQ Expression 操作。更多说明见JQ Expression 操作示例

可用数据操作

operations 输入参数可选项如下。 所有操作都基于输入的 Data 对象执行。

NameRequired InputsProcess
Select Keysselect_keys_input从数据中提取指定键。
Literal EvalNone将字符串值按 Python 字面量求值。
CombineNone将多个数据对象合并成一个。
Filter Valuesfilter_key, filter_values, operator基于键值对过滤数据。
Append or Updateappend_update_data追加或更新键值对。
Remove Keysremove_keys_input删除指定键。
Rename Keysrename_keys_input重命名数据中的键。
Path Selectionmapped_json_display, selected_key使用路径表达式从嵌套 JSON 结构中提取值。
JQ Expressionquery使用 jq 语法执行高级 JSON 查询、投影与转换。

Path Selection 操作示例

使用 Path Selection 操作时,你可以通过点号路径从嵌套 JSON 结构中提取值。

  1. Operations 下拉框中选择 Path Selection

  2. JSON to Map 字段中输入你的 JSON 结构。

    下面这个例子使用如下 JSON:


    _11
    {
    _11
    "user": {
    _11
    "profile": {
    _11
    "name": "John Doe",
    _11
    "email": "john@example.com"
    _11
    },
    _11
    "settings": {
    _11
    "theme": "dark"
    _11
    }
    _11
    }
    _11
    }

    Select Path 下拉框会自动列出可用路径。

  3. Select Paths 下拉框中选择目标路径。 例如你可以选择 .user.profile.name 提取 "John Doe",也可以选择 .user.settings.theme 提取 "dark"

JQ Expression 操作示例

使用 JQ Expression 操作时,可以借助 jq 查询语言对 JSON 执行更高级的过滤与变换。

  1. Operations 下拉框中选择 JQ Expression

  2. JQ Expression 字段中输入一个 jq 过滤器,用于查询 Data Operations 组件的 Data 输入。

    对于下面这个 JSON 示例,你可以输入 .user.profile.name 提取 "John Doe",输入 .user.profile | {name, email} 将字段投影成一个新对象,或者输入 .user.profile | tostring 把对象转换成字符串。


    _11
    {
    _11
    "user": {
    _11
    "profile": {
    _11
    "name": "John Doe",
    _11
    "email": "john@example.com"
    _11
    },
    _11
    "settings": {
    _11
    "theme": "dark"
    _11
    }
    _11
    }
    _11
    }