添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
跳到主要内容

工作流节点- JSON解析节点介绍


节点功能: 对于“代码块”或“发送API请求”的节点中输出的JSON对象,此节点可以通过JSON Path表达式将指定内容输出为动态参数(变量、数组),供后续节点使用。

  • 可处理的数据: 来自代码块节点或发送API请求节点返回的JSON对象

  • 可输出的数据: 变量或数组

场景示例: 通过物流查询平台API获取某个快递的历史物流信息,写入到物流信息子表中,同时需要单独获取到最新的物流信息,写入到当前位置字段中。 根据物流信息的Json对象,通过JSON Path表达式可以将整个物流历史信息的对象数据和单个最新物流信息分别获取并打包输出,供后续的批量新增节点和更新节点使用。

配置示例

1、先通过发送API请求节点,获取物流信息

如下图,根据快递单号获取到其物流信息,通过Json对象返回。

2、添加 JSON解析节点

3、获取JSON对象

即选择哪个节点输出的JSON对象,这里选择获取物流信息(API)这个节点。

4、查看解析结果

  • 1)点击查看解析结果按钮

  • 2)结果说明

    弹出的解析结果中,将API返回的JSON对象都做了说明,包括对应的参考值、JSON Path表达式。

5、定义输出参数

  • 1)从解析结果中选择参数

    例如,我们需要获取整个物流信息和第一条物流信息。点击右侧的【生成参数】,就会自动添加对应的参数。

    如果您比较熟悉JSON Path表达式,可以直接手动添加参数

  • 2)输出参数示例

    定义好输出参数后,下方会立即显示对应的示例数据。

6、定义错误消息

当返回匹配错误结果的 JSON 时,可以自定义中止输出参数时的错误消息。

  • 可以通过输出参数中获取返回值作为错误消息,以某个或多个值的条件对比,确定错误。

  • 错误的输出消息可以是静态文本,也可以从其他节点中选择动态值。

  • 如果定义了错误消息,则可以定义发生错误时,后续节点是否继续执行。

    • 继续执行

      后面的节点继续执行,如果之后有节点使用本节点对象或输出的数据时,将跳过对应的项(并不一定是整个节点调整,例如更新节点更新了5个字段,其中1个字段更新时使用了此节点的值,那么只有此字段不处理,其他字段正常更新)

    • 中止流程

      到此节点结束,后续节点不再执行。

7、使用JSON解析节点的输出参数

1) 将物流信息批量新增的工作表

  • 获取物流数组信息

    输出的数组类型必须先用获取多条数据节点接收,转换为平台可识别的数据结构。

  • 通过新增节点把数据批量写入

2) 将最新物流信息写入到本表字段

非数组类型的可以直接从节点中选择。

什么是 JSONPath?

JSONPath 是参照 XPath 设计的一种对 JSON 格式文档进行解析的工具。通过 JSONPath 表达式,可以方便的从 JSON 结构中获取到任意指定的数据,而无需经过手动层层的解析。工作流中的「JSON 解析」节点,可以对传入的 JSON 数据用 JSONPath 进行解析后输出为参数供后续节点使用。

JSONPath 与 XPath

对了解 XML 的人来说都知道,XML 的一个经常被强调的优点就是有大量的工具来分析、转换和有选择地从 XML 文档中提取数据。XPath 就是这些强大的工具之一。 JSONPath 表达式则是一个类似的 JSON 工具。它可以直接描述 JSON 结构,与 XPath 表达式引用 XML 文档使用的方式相同。由于 JSON 结构通常是匿名的,并没有一个 "根成员对象",所以 JSONPath 使用名称 $ 来表示最外层的对象。 例如我们用一个 XPath 来描述从 XML 结构中获取根节点下 store 节点下第一本书的标题: /store/book [1] /title 同样的 JSON 结构,我们可以用下面的 JSONPath 来获取该数据: $.store.book [0] .title $ ['store']['book'] [0]['title'] 以下是完整的 JSONPath 语法元素与 XPath 对应元素的用法比较:

筛选操作符

JSONPath 中可以使用筛选表达式筛选出符合条件的节点。筛选表达式需要返回一个布尔值,然后 JSONPath 会筛选符合条件的节点组成数组返回。一个典型的筛选表达式是 [?(@.age > 18)] ,其中 @ 代表正在处理的当前节点。更复杂的筛选表达式可以用逻辑运算符 && 和 || 来创建。字符串必须用单引号或双引号括起来,如 [?(@.color == 'blue')] [?(@.color == "blue")]