跳到主要内容

数据操作

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

在流程中使用 Data Operations​

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

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

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

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

    提示

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

  3. 在 Select Keys 下为 name、username 和 email 添加键。 点击 Add more 可为每个键新增一个字段。

    在本例中,我们假设 webhook 接收到的负载始终包含 name、username 和 email 这几个键。 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 参数​

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

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
    }