Loading
工具
1698 字
8 分钟

Twikoo 评论一键迁移 Waline(双向互转)

AI 摘要

一、迁移前置说明#

本文档适配基于 Firefly 主题的 Astro 静态博客,完整覆盖 Twikoo ↔ Waline 评论数据双向转换全流程,解决四大高频痛点:

  1. 转换后的时间戳格式非法,导入时 Waline 后台报 500: invalid input syntax for type timestamp
  2. Waline 后台导入提示成功,但前台页面完全不显示评论(路径尾斜杠不匹配);
  3. 转换后父子回复全部平铺,多层嵌套回复层级直接丢失;
  4. Twikoo 与 Waline 互转时缺少双向支持,无法反向恢复。

前置准备清单#

  1. 已部署完成 Waline 服务(示例地址:https://waline.fqzlr.com);
  2. Firefly 博客页面已挂载 Waline 前端评论组件;
  3. 可正常登录 Twikoo 管理后台导出原始评论 JSON;
  4. 浏览器推荐 Chrome / Edge。

二、第一步:导出原始评论数据#

Twikoo 导出#

  1. 进入 Twikoo 管理后台;
  2. 找到「数据导出」,导出全部评论为 纯 JSON 数组,保存为 .json 文件。

Waline 导出#

  1. 进入 Waline 管理后台 https://waline.fqzlr.com/ui
  2. 左侧菜单「导入导出」→ 导出全部数据,保存为 .json 文件。

重要:Twikoo 导出每条评论需包含 _idpidrid 字段;Waline 导出需包含 data.Commentdata.Usersdata.Counter 三表。

三、第二步:双向转换工具(自动修复路径尾斜杠 + 保留嵌套回复)#

工具核心能力#

Important

本工具针对实际迁移踩坑场景做了以下修复和增强:

  1. 修复时间格式 500 错误toISOString() 已自带 3 位毫秒(如 2026-04-25T11:23:19.928Z),不再拼接多余的 .000,避免产生非法格式 2026-04-25T11:23:19.928.000Z
  2. 自动补路径尾斜杠:所有 url 末尾自动追加 /,与 Firefly 前台路径格式(/friends/)完全一致;
  3. 完整还原嵌套回复:Twikoo _id ↔ Waline objectId 建立完整映射表,pid/rid 精准关联父子评论;
  4. 1:1 对齐 Waline 数据表:补齐 Comment/Counter/Users 三表及所有必填字段;
  5. 支持双向互转:Twikoo → Waline 和 Waline → Twikoo 均可一键转换;
  6. 本地离线运算:所有数据在浏览器端处理,不上传任何服务器。

内嵌交互式转换工具#

Twikoo ↔ Waline 双向转换器

1. 粘贴 JSON 数据或上传文件
2. 自动给 url 末尾加 /(Twikoo→Waline 方向)
3. 完整保留多级嵌套回复关系,支持双向互转

批量替换 url 前缀:

转换结果预览

新建文本文件,复制下方全部代码,保存为 twikoo-to-waline.html,双击用浏览器打开即可离线使用:

转换工具操作步骤#

Twikoo → Waline 方向#

  1. 在上方内嵌工具中,顶部切换按钮选择「Twikoo → Waline」;

  2. 导入数据,二选一:

    • 粘贴 Twikoo 完整 JSON 数组到输入框;
    • 点击「上传本地 JSON」,选中导出的 Twikoo 备份文件;
  3. (可选)路径前缀批量替换:填写旧/新路径前缀后点击「一键替换全部 url」,替换后自动补尾斜杠;

  4. 点击「开始转换」;

  5. 预览校验:

    • 每条评论 "url": "/xxx/" 末尾已自动补 /
    • 子评论 pid 为数字 ID,代表父子关联正常;
  6. 点击「下载结果 JSON」保存 waline-import.json

Waline → Twikoo 方向(反向恢复)#

  1. 顶部切换按钮选择「Waline → Twikoo」;
  2. 粘贴 Waline 导出的完整 JSON 对象;
  3. 点击「开始转换」→ 下载 twikoo-export.json
  4. 注意:Waline 原始数据不含 uidmailMd5ipRegionhref 等 Twikoo 特有字段,转换后这些字段为空或默认值。

四、第三步:Waline 后台导入转换后的评论文件#

  1. 访问 Waline 管理后台:https://waline.fqzlr.com/ui
  2. 左侧菜单栏打开「导入导出」页面;
  3. Warning

    导入操作会覆盖现有评论,务必先导出当前 Waline 评论备份,防止数据丢失;

  4. 上传刚下载的 waline-import.json,点击执行导入;
  5. 导入完成后,Ctrl + F5 强制刷新后台页面,即可在评论列表看到全部迁移历史评论,嵌套回复正常分层展示。

五、第四步:Firefly 博客前台验证评论展示#

路径匹配原理#

转换工具已自动为所有评论 url 末尾添加 /,Waline 使用精确字符串匹配页面路径,和 Firefly 前台手动提交评论的路径格式完全一致。

  1. 打开博客任意文章页面,示例:fqzlr.com/friends/
  2. Ctrl + F5 强制清除浏览器缓存刷新页面;
  3. 页面加载全部迁移历史评论,子评论正常缩进嵌套展示。

前台无评论 / 层级错乱排查方案#

  1. F12 打开浏览器开发者工具,切换到 Network 面板;
  2. 筛选 Waline API 请求,查看请求参数 path 是否为带尾斜杠格式(/friends/);
  3. 进入 Waline 后台查看单条评论详情:
    • url 缺少末尾 /:重新转换,确认路径已自动补斜杠;
    • 若子评论 pid 为 null:原始 Twikoo 数据缺失 _id/pid/rid,清理脏数据后重新导出转换;
  4. 确认导入流程无报错、未清空原有评论数据。

六、高频踩坑问题汇总#

坑1:导入时报 500 错误 invalid input syntax for type timestamp#

  • 具体报错:500: invalid input syntax for type timestamp: "2026-04-25T11:23:19.928.000Z"
  • 根因:旧版转换工具的 tsToISO 使用了 toISOString().replace('Z', '.000Z'),当毫秒本身已有 3 位时(如 .928Z),替换后变成 .928.000Z,PostgreSQL 无法解析双重小数点格式;
  • 解决方案:使用本文新版转换工具(v2),new Date(ms).toISOString() 直接输出标准 ISO 8601 格式,无需额外拼接。

坑2:导入成功,后台可见评论,Firefly 前台页面空白#

  • 根因:路径末尾斜杠不匹配(/friends vs /friends/);
  • 解决方案:使用本文新版转换工具,转换时自动为所有 url 补尾斜杠,清空旧评论后重新导入。

坑3:导入提示成功,但 Waline 后台无任何评论#

  • 原因1:转换 JSON 缺失 createdAt/user_id/like 数据库必填字段;
  • 原因2:外层 JSON 结构缺少 CounterUsers 空数组;
  • 解决方案:使用本文完整版转换工具,已补齐全部标准字段与外层结构。

坑4:所有回复全部平铺,没有嵌套层级#

  • 根因:转换工具未做 Twikoo _id 与 Waline objectId ID 映射,父子评论 pid 关联断裂;
  • 解决方案:使用本文修复层级回复的新版转换器,完整还原多级回复关系。

坑5:转换工具下载按钮点击无响应#

  • 解决方案:更换 Chrome / Edge 浏览器,关闭浏览器弹窗拦截功能。

坑6:评论图片、换行、Emoji 丢失乱码#

  • 解决方案:工具内置 UTF-8 编码处理,Twikoo→Waline 方向会去除 HTML 标签保留纯文本。

七、兜底备用方案(后台导入解析失败时)#

若 Waline 后台导入接口持续丢失数据、层级错乱,可直接写入数据库绕过解析器:

  1. 打开转换后的 waline-import.json,复制 data.Comment 数组内全部评论对象;
  2. 进入数据库管理面板(MySQL / SQLite / LeanCloud);
  3. 找到 wl_Comment 数据表,批量插入复制的评论数组;
  4. 直接写入数据库不会丢失任何评论数据、完整保留回复层级。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Twikoo 评论一键迁移 Waline(双向互转)
https://fqzlr.com/posts/blog/twikoo-to-waline/
作者
Fqzlr
发布于
2026-07-18
许可协议
CC BY-NC-SA 4.0

评论区

音乐
封面

音乐

暂未播放

0:00
0:00
暂无歌词
站点统计
文章
17
动态
3
记录次数
98
分类
2
标签
38
总字数
28,793
运行时长
0
最后活动
0 天前
[ 标签 ]
# AI工具 1 # Astro 6 # astro 1 # Cloudflare 3 # Example 1 # Firefly 6 # fuwari 1 # Git 1 # IP优选 1 # Markdown 6 # MDX 1 # Mermaid 1 # Mizuki 1 # Obsidian 3 # PlantUML 1 # Qoder 1 # Spaceship 1 # Trae 1 # Twikoo 1 # Video 1 # Waline 1 # Workers 1 # 主题对比 1 # 二改 1 # 博客 9 # 博客迁移 1 # 图床 2 # 域名 1 # 想法 1 # 文章示例 2 # 测试 2 # 演示 1 # 示例 1 # 笔记 1 # 笔记软件 1 # 自建图床 1 # 评论系统 1 # 静态博客 2
[ 分类 ]
# 博客相关 10 # 文章示例 7
[ 公告 ]

疯狂修改中

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:00
0:00
暂无歌词
找不到相关结果。
主题色相
250
壁纸模式
特效设置
文章布局
[ contents ]
[ 全部文章 ]
全部文章