有道云笔记有脑图功能 , 我平时经常用到 , 之所以很少用到其他脑图工具 , 是因为我一直用有道云笔记写笔记 。因此编辑脑图和查看脑图比较方便 , 但是需要将脑图导出的时候目前只支持图片和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 jsonimport xmindimport sysimport os
def convert_mindmap_xmind(input_file, save_file):data_dict = {}# 将节点保存到字典中with open(input_file, \\’r\\’, encoding=\\’utf-8\\’) as f:json_data = https://www.fajihao.com/i/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 = Nonefor val in data_dict.values():if val[\\’id\\’] == \\’root\\’:data_root = val# 保存根节点elif n := data_dict.get(val[\\’parentid\\’]):# 当前节点挂到父节点下n[\\’sub_topic\\’][val[\\’id\\’]] = valif 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导出成各种格式 , 满足大家的所有需求了 。
总结
【手机上做笔记的app推荐 免费云笔记哪个好用】生活中有很多技巧都需要我们去发现 , 并找到解决方案 。想一想自己的需求是不是大家的需求 , 如果是那就有解决的价值 。反正我有了这个方案就可以放心地在有道云笔记上写脑图了 。如果需要发布给其他人看 , 就通过我的这个项目导出成xmind , 然后通过xmind导出成各种格式文件 。
- 盲盒营销正在演变为饥饿游戏 肯德基盲盒二手价暴涨8倍
- 什么是手机虚拟卡号 虚拟卡是什么意思
- 一个手机号可以注册几个微信号怎么注册 一个手机号可以注册几个微信号
- 2022年最新手游排行榜 光环游戏顺序
- 手机通讯录恢复方法 备份通讯录有哪些方法
- 通话录音恢复软件推荐 通话录音怎么设置
- 电池健康度对手机有什么影响 手机电池健康度有必要关注吗吗
- oppo手机分辨率在哪里设置方法 手机分辨率怎么设置
- 京东回收旧手机靠谱吗 京东爱回收靠谱吗
- 二手房交易全套流程 第2套房子100万交税多少买卖双方