关键是要确保TextIn解析出的Markdown表格结构完整(含分隔线、表头、数据行),再用Python脚本或Dify工作流将其转为标准JSON数组,避免合并单元格导致字段错位或丢失。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要把火山引擎中解析出的表格内容转换成标准 JSON 数组格式,关键不是手动拼接,而是让结构化输出从数据源头就对齐语义边界——尤其当表格含合并单元格、跨页表头或嵌套行列时,直接丢给通用 JSON 序列化工具只会生成错位嵌套或字段丢失。
确认 TextIn 解析结果是否含完整表格语义
打开 TextIn 大模型加速器控制台 → 进入「PDF 转 Markdown」任务详情页 → 查看返回的 Markdown 原文。重点检查表格区域是否保留了 |---| 分隔线、表头行(| 字段A | 字段B |)和数据行(| 值1 | 值2 |)三段式结构。若出现 || 连续竖线、缺失分隔线、或整块表格被压成单行文本,则说明 OCR 表格重建失败,后续 JSON 转换必然失真。
这一步不可跳过:TextIn 的「表格还原精度」开关必须开启,且 PDF 页面 DPI ≥ 150,否则合并单元格会被切碎,JSON 数组里就会多出空字段或错位键名。
用 Python 脚本将 Markdown 表格转为 JSON 数组
方法一:使用 markdown-table-to-json 库(轻量、无依赖)
在 VS Code 中新建 table2json.py,填入以下代码:
```python
import sys
import json
import re
def parse_markdown_table(md_text):
lines = [line.strip() for line in md_text.strip().split('\n') if line.strip()]
header_line = None
data_lines = []
for i, line in enumerate(lines):
if re.match(r'^\s*\|.*\|$', line) and not re.match(r'^\s*\|[-:| ]+\|$', line):
if header_line is None:
header_line = line
else:
data_lines.append(line)
if not header_line:
return []
headers = [h.strip() for h in re.split(r'\s*\|\s*', header_line.strip('|')) if h.strip()]
result = []
for data_line in data_lines:
cells = [c.strip() for c in re.split(r'\s*\|\s*', data_line.strip('|')) if c.strip()]
if len(cells) == len(headers):
result.append(dict(zip(headers, cells)))
return result
if __name__ == '__main__':
with open(sys.argv[1], 'r', encoding='utf-8') as f:
md = f.read()
json_arr = parse_markdown_table(md)
print(json.dumps(json_arr, ensure_ascii=False, indent=2))
```
运行命令:python table2json.py input.md > output.json。注意:该脚本不处理跨行单元格,仅适用于 TextIn 输出中已成功还原为标准 Markdown 表格的场景。
在 Dify 工作流中自动完成表格→JSON 数组转换
第一步:添加「HTTP 请求」节点,调用 TextIn 的 PDF 解析 API,设置请求体为:{"file_url": "https://your-bucket/财报.pdf", "output_format": "markdown"}。
第二步:添加「代码执行」节点(Python),粘贴以下逻辑:
```python
import json
import re
md = $input.text # 接收上一节点返回的 Markdown
# 提取第一个完整表格(含表头+分隔线+数据行)
table_match = re.search(r'(\|[^\n]+\|\s*\|[-:| ]+\|\s*(?:\|[^\n]+\|)+)', md, re.DOTALL)
if not table_match:
return {"error": "未找到有效表格"}
table_block = table_match.group(1).strip()
lines = [l.strip() for l in table_block.split('\n') if l.strip()]
headers = [h.strip() for h in re.split(r'\s*\|\s*', lines[0].strip('|')) if h.strip()]
rows = []
for line in lines[2:]:
cells = [c.strip() for c in re.split(r'\s*\|\s*', line.strip('|')) if c.strip()]
if len(cells) == len(headers):
rows.append(dict(zip(headers, cells)))
return {"json_array": rows}
```
第三步:将「代码执行」节点的输出字段 json_array 绑定到下游「写入飞书多维表格」或「生成 Excel」节点。注意:【代码节点必须启用沙箱环境,且禁止传入未经清洗的原始 PDF 内容,否则正则会因换行符混乱而漏匹配】。
















