我的烦恼

有道云笔记有脑图功能,我平时经常用到,之所以很少用到其他脑图工具,是因为我一直用有道云笔记写笔记。因此编辑脑图和查看脑图比较方便,但是需要将脑图导出的时候目前只支持图片和xmind,但是需要开会员,由于囊中羞涩,所以我想了别的方案。

解决方案

我找到xmind的官方GitHub:

https://github.com/xmindltd,找到了python的SDK,看了下有python和java以及js这三个sdk,但是Java和python的sdk已经不维护了,不过还是可以用的,就是新功能可能用不了。

找到了生成xmind的方法,但是如何将有道云笔记脑图的源文件拿到呢?还得分析一下源文件格式,写写算法去进行转换。之前导出过有道云笔记,知道好多文件都是明文保存,没有加密啥的,因此我用everything搜索了我的文件名,还真找到了办法。如下图所示,就是我找到的文件名,然后通过文件搜索工具搜到了源文件位置。

下面是我的思维导图的源文件,用文本方式打开,发现就是一个简单的json格式。

下面就是json内容,实际就是每个节点都有父节点id,根节点没有父节点,每个节点组成一个数组,这种格式处理最好用的就是递归的方法。

{
"nodes": [
{
"id": "root",
"isroot": true,
"topic": "测试脑图",
"customStyle": {
"fontFamily": [
"Microsoft YaHei",
"STXihei"
]
},
"link": null,
"expanded": true,
"parentid": null,
"style": {}
},
{
"id": "a231f89912e42e5b",
"topic": "分支主题1",
"customStyle": {
"fontFamily": [
"Microsoft YaHei",
"STXihei"
],
"borderColor": "#4D94FF"
},
"expanded": true,
"parentid": "root",
"style": {}
}
],
"readOnly": false,
"toolbar": {
"lineType": "default",
"strategy": "logic_right",
"zoom": 1,
"loading": true,
"borderColor": "#4D94FF"
},
"remarks": {},
"version": "2.0",
"resourceList": ""
}

动手操作

我的所有代码都放到GitHub:

https://github.com/jan-bar/mindmap_to_xmind,如果有兴趣,可以去看看,核心代码如下,没有太复杂的东东。

import json
import xmind
import sys
import os def convert_mindmap_xmind(input_file, save_file):
data_dict = {} # 将节点保存到字典中
with open(input_file, 'r', encoding='utf-8') as f:
json_data = json.load(f)
for node in json_data['nodes']:
data_dict[node['id']] = {
'id': node['id'],
'parentid': node['parentid'],
'topic': node['topic'],
'sub_topic': {},
} data_root = None
for val in data_dict.values():
if val['id'] == 'root':
data_root = val # 保存根节点
elif n := data_dict.get(val['parentid']):
# 当前节点挂到父节点下
n['sub_topic'][val['id']] = val
if data_root is None:
print('数据有误,没有找到根节点')
return
# print(json.dumps(data_root)) # 可以打印看看结果 if os.path.exists(save_file):
os.remove(save_file) # 目标文件存在则删除 mind = xmind.load(save_file)
sheet1 = mind.getPrimarySheet()
# 获取sheet并设置名称为输入文件名
sheet1.setTitle(os.path.basename(input_file))
root1 = sheet1.getRootTopic()
# 设置属性为: 逻辑图(向右), 和有道云笔记保持一致
root1.setAttribute('structure-class', 'org.xmind.ui.logic.right') def set_topic(root, val_data):
root.setTitle(val_data['topic'])
for sub_val in val_data['sub_topic'].values():
set_topic(root.addSubTopic(), sub_val)
set_topic(root1, data_root) # 递归设置子节点 xmind.save(mind, save_file) if __name__ == '__main__':
if len(sys.argv) != 3:
print(f'usage: {sys.argv[0]} input.mindmap save.xmind')
exit(0)
convert_mindmap_xmind(sys.argv[1], sys.argv[2])

最终效果,上面那个有道云笔记的结构完美转换为下面的xmind,然后就可以通过xmind导出成各种格式,满足大家的所有需求了。

总结

生活中有很多技巧都需要我们去发现,并找到解决方案。想一想自己的需求是不是大家的需求,如果是那就有解决的价值。反正我有了这个方案就可以放心地在有道云笔记上写脑图了。如果需要发布给其他人看,就通过我的这个项目导出成xmind,然后通过xmind导出成各种格式文件。

无需会员将有道云笔记脑图转换xmind的更多相关文章

  1. 有道云笔记配合MPic+七牛云 自制MarkDown文档图床(适用Typora)

    注:从有道云笔记v6.5开始,有道云笔记会员可以使用MarkDown有道自带的图床.(但是非会员可以采用下面的七牛云图床+MarkDown方法) 0x00 前言 一直用有道云笔记,粘贴图片,做笔记没问 ...

  2. 无需脑图 无需思维导图 看Word大纲视图

    大纲视图可以帮助我们大纲视图可帮助您管理文档的结构和标题,就像现在的脑图,经过我的使用后,可以说Word的分级功能非常强大,只恨当时理解的不够,误会了Word.   当我们决定写一个文档的时候,第一步 ...

  3. 有道云笔记新功能发现——有道云笔记剪报,完美解决不开会员保存csdn博客到本地的问题。

    怎么用 方法一:谷歌插件 方法二:http://note.youdao.com/web-clipper-chrome.html 添加到书签 功能: 能够把网页浏览的内容保存到有道云笔记 解决了自己的难 ...

  4. 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)

    有道云笔记 - Markdown模板 附 本文的Markdown源码镜像: https://github.com/yanglr/AlgoSolutions/blob/master/Youdao_Not ...

  5. 有道云笔记Markdown上传本地图片的方法

    有道云笔记截图&保存   方法有多种,例如:开通有道云笔记VIP会员.先将图片文件上传到有道云笔记后使用图片的分享链接.说到底还是使用的 Markdown 的图片功能 ![图片名称](图片链接 ...

  6. [转]有道云笔记markdown

    作为半个文字工作者,一天当中,一半时间用在遣词造句,一半时间则在死磕排版.当听说“前所未有的极简语法”Markdown,不仅能简化排版.大大提高书写效率,而且上手零门槛.好奇宝宝怎么忍得住一颗蠢蠢欲动 ...

  7. [简明版] 有道云笔记Markdown指南

    使用有道词典配合Markdown,可以快速准确做出美观精致的笔记,下面我们来看一下如何使用有道词典的MarkDown功能. 什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程 ...

  8. 使用有道云笔记还是github写笔记的优缺点对比

    有道云笔记的优点 在手机上编辑笔记,有道云的体验更好,建议:新建普通类型笔记而不是markdown笔记,因为md在手机上的编辑体验并不好 插入图片方便无需考虑图床 可以把笔记分享到社交平台(QQ,微信 ...

  9. naotu.baidu.com 非常棒的脑图在线工具

    1.png 2.txt 短租 前台功能 房源查看 房源搜索 城市房源 注册登录 预定房源 房源退订 在线支付 评价房源 个人中心 我的订单 我的账户 我的收藏 消息通知 管理员后台 房源发布 会员管理 ...

随机推荐

  1. 手写一个LRU工具类

    LRU概述 LRU算法,即最近最少使用算法.其使用场景非常广泛,像我们日常用的手机的后台应用展示,软件的复制粘贴板等. 本文将基于算法思想手写一个具有LRU算法功能的Java工具类. 结构设计 在插入 ...

  2. VS2010编写32位和64位dll环境配置,以及判断dll是多少位

    前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...

  3. Spring 中使用了那些设计模式呢?

    一. Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模 ...

  4. [刷题] 237 Delete Nodes in a Linked List

    要求 给定链表中的一个节点,删除该节点 思路 通过改变节点的值实现  实现 1 struct ListNode { 2 int val; 3 ListNode *next; 4 ListNode(in ...

  5. [tools] 工具

    代码编辑 notepad++ 文档对比 Beyond Compare 代码阅读 source insight 代码分析 Scitools 下载 http://www.cr173.com/soft/29 ...

  6. MySQL给某个用户给某个库表设置权限

    -- 用root(最高权限的用户)进行以下操作-- 创建数据库:emc_power CREATE DATABASE emc_power DEFAULT CHARACTER SET utf8 COLLA ...

  7. groovy脚本语言基础1

    一 搭建groovy环境 安装JDK [root@node1 ~]# yum  -y install java-11-openjdk 官网下载groovySDK下载 https://groovy.ap ...

  8. Scala 中的可变(var)与不可变(val)

    引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...

  9. 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext

    长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...

  10. Apache Jena Fuseki使用

    下载Apache Jena Fuseki 先从apache官网下载fuseki压缩包.然后解压到目标文件夹. apache官网:http://jena.apache.org/download/ 这里我 ...