以下是一个使用Node.js读取Gitbook的summary目录md文件并转换为JSON结构的示例代码:

const fs = require('fs');
const path = require('path');
const marked = require('marked');

const SUMMARY_FILE = 'SUMMARY.md';

// 读取summary.md文件内容
const summaryContent = fs.readFileSync(SUMMARY_FILE, 'utf8');

// 将markdown内容转换为HTML
const summaryHtml = marked(summaryContent);

// 将HTML解析为DOM结构
const cheerio = require('cheerio');
const $ = cheerio.load(summaryHtml);

// 解析DOM结构,构建JSON树结构
const summaryJson = [];
let currentLevel = 0;
let currentParent = summaryJson;

$('a').each((i, elem) => {
  const href = $(elem).attr('href');
  const text = $(elem).text().trim();

  if (!href.startsWith('#')) {
    const title = text.replace(/^[0-9.]+/, '').trim();
    const level = text.match(/^[0-9.]+/)[0].split('.').length;

    const item = { title, level, href };
    const parent = findParent(currentLevel, currentParent, level);

    parent.push(item);
    currentLevel = level;
    currentParent = item.children = [];
  }
});

// 查找当前节点的父级节点
function findParent(currentLevel, currentParent, targetLevel) {
  if (targetLevel > currentLevel) {
    return currentParent[currentParent.length - 1].children;
  } else if (targetLevel === currentLevel) {
    return currentParent;
  } else {
    return findParent(currentLevel - 1, currentParent[currentParent.length - 1].children, targetLevel);
  }
}

console.log(summaryJson);

该代码使用了以下三个第三方库:

  • marked 将Markdown转换为HTML;
  • cheerio 将HTML解析为DOM结构,方便查找节点;
  • path 用于处理文件路径。

该代码的主要逻辑如下:

  1. 读取SUMMARY.md文件内容;
  2. 将Markdown内容转换为HTML;
  3. 将HTML解析为DOM结构;
  4. 遍历所有a标签,解析出标题、链接和级别等信息;
  5. 根据级别信息构建JSON树结构。

最终输出的JSON结构类似于以下格式:

[
  {
    'title': 'Introduction',
    'level': 1,
    'href': 'README.md',
    'children': []
  },
  {
    'title': 'Chapter 1',
    'level': 1,
    'href': 'chapter1/README.md',
    'children': [
      {
        'title': 'Section 1.1',
        'level': 2,
        'href': 'chapter1/section1.1.md',
        'children': []
      },
      {
        'title': 'Section 1.2',
        'level': 2,
        'href': 'chapter1/section1.2.md',
        'children': []
      }
    ]
  }
]

该代码可以帮助您将Gitbook的目录结构转换为JSON数据,方便您进行其他处理,例如:

  • 使用JavaScript生成静态网站的导航菜单;
  • 将目录结构数据导入数据库,方便管理和搜索;
  • 与其他工具集成,进行自动化构建等。
Node.js读取Gitbook的summary目录md文件并转换为JSON结构

原文地址: https://www.cveoy.top/t/topic/nnZZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录