Files
1hew-ComfyUI-1hewNodes/web/docs/1hew_TextPathExtract/zh.md
T

5.8 KiB
Raw Blame History

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,未加载该扩展时只是输出名不显示数字,取到的值不受影响。