如何将Google Docs API返回内容解析为基于标题的树结构?
Google Docs标题树状结构转换方案
Google Docs官方API没有提供直接将扁平段落列表转换为标题树状结构的内置接口,你需要自行解析API返回的内容来构建树结构。
实现思路
- 从API返回的
document.body.content中筛选出带有标题样式的段落(通过段落的paragraph.paragraphStyle.namedStyleType判断,比如HEADING_1、HEADING_2等) - 维护一个层级栈来跟踪当前标题的父节点:
- 遍历每个标题时,先弹出栈中级别大于等于当前标题级别的节点,找到对应的父级
- 将当前标题作为子节点添加到父节点的
children数组中(如果是顶级标题则直接加入根列表) - 将当前标题推入栈中,作为后续子标题的父级候选
伪代码示例
// 初始化树结构和层级栈 const titleTree = []; const levelStack = []; // 遍历API返回的所有内容块 document.body.content.forEach(block => { // 筛选标题段落 if (block.paragraph && block.paragraph.paragraphStyle.namedStyleType.startsWith('HEADING_')) { const level = parseInt(block.paragraph.paragraphStyle.namedStyleType.split('_')[1]); const titleText = block.paragraph.elements.map(el => el.textRun.content).join('').trim(); // 调整栈,找到当前标题的父节点 while (levelStack.length > 0 && levelStack[levelStack.length - 1].level >= level) { levelStack.pop(); } const titleNode = { text: titleText, level: level, children: [] }; if (levelStack.length === 0) { titleTree.push(titleNode); } else { levelStack[levelStack.length - 1].children.push(titleNode); } levelStack.push(titleNode); } });
这种方法可以精准还原Google Docs侧边栏的标题树结构,满足内容目录生成、结构化提取等场景需求。
内容的提问来源于stack exchange,提问作者gust
相关产品推荐
相关产品推荐

