5.8 KiB
5.8 KiB
Text Path Extract - 文本路径取值
节点功能: Text Path Extract 按路径表达式从 text 输入框的内容中取值。内容可以是 JSON 文本、Markdown 代码块包裹的 JSON、Python 字面量、宽松 JSON(单引号、尾随逗号、True/False/None、无引号键)或普通文本。默认路径 [*] 会把整段内容按项展开;用 [0].content、[-1].bbox[0]、data.items[0].zh、[*].content 这样的路径即可取到对应内容。
输入
| 参数名称 | 数据类型 | 默认值 | 取值范围 | 描述 |
|---|---|---|---|---|
text |
STRING | `` | 多行 | 要解析的内容:JSON / 类 JSON / 普通文本 |
path |
STRING | [*] |
- | 路径表达式;[*] 表示整段内容的所有项,空字符串表示整段内容本身 |
output_format |
COMBO | auto |
auto / json / text / csv |
只影响 text 输出;auto 为智能排版(见下表) |
separator |
STRING | \n |
支持 \n / \t / \r |
多项匹配时(json 以外的格式)的连接符 |
fallback |
STRING | `` | - | 路径未命中或输入为空时的兜底返回值 |
输出
| 输出名称 | 数据类型 | 描述 |
|---|---|---|
text |
STRING | 按 output_format 渲染后的文字;多项匹配时 json 输出一个整体数组,其他格式按 separator 拼接 |
value |
ANY | 原始值,不经过字符串化:列表还是列表、数字还是数字;多项匹配时为列表 |
count |
INT | 路径命中的项数;路径以 .count / .length / [#] 结尾时为该数量;未命中或输入为空时为 0。执行后输出名前面会显示这个数字(如 3 count) |
输出格式 output_format
以 path=[0].bbox(值是一个坐标列表)为例,output_format 只改变 text,不影响 value:
| 取值 | 含义 | 该例的 text |
|---|---|---|
auto |
智能排版:字符串原样、列表 / 字典转紧凑 JSON、数字与布尔转文字 | [184,410,845,716] |
json |
一律输出 JSON,字符串会带双引号 | [184,410,845,716] |
text |
Python str() 风格:列表带空格、字符串不加引号 |
[184, 410, 845, 716] |
csv |
列表用逗号加空格连接,去掉括号 | 184, 410, 845, 716 |
路径语法
| 写法 | 含义 |
|---|---|
[0] / [-1] |
列表下标,支持负数 |
.content / content |
字典键,开头的点可省略 |
[0]["content"] / [0].'content' |
带引号的键,键名含空格或点号时使用 |
$.data.items[0].zh |
可选的 JSONPath 风格根 $ |
[*] / [*].content / data.*.content |
通配,遍历每一项(默认路径就是 [*]) |
[*].content.count / [0].bbox.length / [0].bbox[#] |
计数:多项匹配时为匹配数量,单个匹配时为该列表 / 字典 / 字符串的长度 |
| 空字符串 | 返回整段内容本身 |
全角的 【】、“”、‘’ 会被自动规范化,中文输入法直接写 【0】.“content” 也能用。
功能说明
- 多级解析:严格 JSON → Python 字面量 → 宽松 JSON(尾随逗号、True/False/None)→ 无引号键的宽松解析 → 截断内容的键值兜底。
- 代码块清理:自动剥离 Markdown 代码块围栏以及 JSON 前后的说明文字。
- 双层 JSON 解码:内容本身是
"{\"a\": 1}"这样的字符串时,会再解一层。 - 精确键名:路径里的键区分大小写,不做同义词猜测;需要同义词兼容时请用
Text Custom Extract。 - 通配收集:
[*]会遍历列表元素或字典的值,把剩余路径应用到每一项。 - 计数:
count输出始终是路径命中的项数;路径末尾写.count/.length/.size/[#]则把数量本身作为值返回,此时count输出也是这个数量。 - 前端数值:执行完成后
count输出名前面会显示数字(如3 count),与count通道值一致;重新连线会先恢复成纯count,下次执行再刷新。 - 整体 JSON:多项匹配且
output_format=json时输出一个完整 JSON 数组([*].bbox→[[184,410,845,716],...]),而不是每项一行;其他格式按separator拼接。
典型用法
- 默认查看每一项:
path=[*],每行一个元素的 JSON。 - 从模型返回的检测结果中取第一项文本:
path=[0].content。 - 取最后一个框的坐标并用于后续节点:
path=[-1].bbox,output_format=json得到[690,264,992,588]。 - 取所有 content 的列表:
path=[*].content,value是列表;output_format=json时text是["犀牛","犀牛","犀牛"]。 - 取所有 bbox 的列表:
path=[*].bbox+output_format=json得到[[184,410,845,716],[508,679,1000,953],[690,264,992,588]]。 - 取数量:直接连
count输出,或把路径写成[*].content.count。 - 把所有标题拼成多行文本:
path=[*].content,默认换行分隔。 - 想要逗号分隔的坐标串:
path=[0].bbox,output_format=csv得到184, 410, 845, 716。 - 把取到的列表 / 字典继续往下传:直接连
value输出。
注意与建议
text为空或全是空白时直接返回fallback,不会报错。- 路径未命中同样返回
fallback;把fallback留空可让下游按空值处理。 - 普通文本(不是 JSON)没有“项”可遍历,
[*]取不到东西;这时把path留空即可原样透传。 auto下字符串原样输出,列表 / 字典输出紧凑 JSON;需要严格 JSON(字符串带引号)时选json。- 键名本身叫
count时不会冲突:对象里确实存在该键则优先返回键值;想强制按字面键取值就写成["count"]。 - 数字显示依赖前端扩展
web/js/output_label.js,未加载该扩展时只是输出名不显示数字,取到的值不受影响。