前几年(2015~2018)都是手动直接将笔记(不含图书详情:封面、ISBN、出版信息等)发布,看到大家最近都在做自我复盘,今天突然有个想法:把阅读笔记做成 Markdown
格式的,这时就需要进行简单的数据处理,即: JSON
数据转换为 Markdown
。
打开浏览器,在Github直接发现大神们已经造好的轮子:json2md。文档一看就明白了,而且最关键的是还可以自行扩展,厉害了!!
我平时的读书笔记专门记录在一个小Web网站上,每读完一本书,相关的图书信息、笔记都会录入到 MongoDB
(数据来源:豆瓣图书爬虫😃),当然,图书的封面目前还是豆瓣的外链。所以先从 MongoDB
中导出数据,导出的原始数据长这样:
把大象放进冰箱需要几步?
这个转换例子很简单,但是还是分几个步骤,我们看下过程:
- 读入input.json,根据需要,选择属性,转为json2md可以接收的格式,生成中间临时文件:temp.json;
- 读入临时的temp.json文件,通过json2md转换为markdown文本,并输出为output.md。
- book. js
const fs = require('fs');
const jsonFile = './file/input.json';
const jsonObj = JSON.parse(fs.readFileSync(jsonFile));
const util = require("./utils/util");
// console.log(jsonObj.length);
// 选取属性进行组装
let temp = [];
for (let book of jsonObj) {
temp.push({
"seperate": ''
});
let image = {
img: {
"alt": book.image,
"source": book.image
}
};
let title = {
"h3": (book.title + ((book.subtitle.length != 0) ? (":" + book.subtitle) : book.subtitle))
};
let note = {
"ul": book.note
};
temp.push(title);
if (book.image) {
temp.push(image);
}
temp.push({
"p": "作者:" + book.author.map(x => {
return `${x.name}[${x.nationality}]` ;
}).toString()
});
if (book.isbn13) {
temp.push({
"p": "ISBN:" + book.isbn13
});
}
if (book.publisher) {
temp.push({
"p": "出版社:" + book.publisher
});
}
if (book.pubdate) {
temp.push({
"p": "出版日期:" + util.formatDate(new Date(book.pubdate))
});
}
if (book.tags.length > 0) {
temp.push({
"p": "图书标签:"
});
temp.push({
"backquote": book.tags
});
}
if (book.douban) {
temp.push({
"p": "豆瓣地址:"
});
temp.push({
"link": {
"title": book.douban,
"source": book.douban
}
});
}
temp.push({
"p": "阅读日期:" + util.formatDate(new Date(book.read))
});
if (book.note.length > 0) {
temp.push({
"p": "读书笔记"
});
temp.push(note);
}
}
// console.log(temp);
// 生成中间文件
util.writeToFile('./file/temp.json', JSON.stringify(temp));
- note. js
const fs = require('fs');
const jsonFile = './file/temp.json';
const jsonObj = JSON.parse(fs.readFileSync(jsonFile));
const json2md = require("json2md");
const util = require("./utils/util");
// 自定义转换:反引号
json2md.converters.backquote = function(input, json2md) {
// return " `" + input + "` ";
if (input instanceof Array) {
return input.map(x => `\` ${x}\``);
} else {
return `\` ${input}\``;
}
}
// 自定义转换:超链接
json2md.converters.link = function(input, json2md) {
return `[${input.title}](${input.source})` ;
}
// 自定义转换:分割线
json2md.converters.seperate = function(input, json2md) {
return `---` ;
}
// 执行转换
let result = json2md(jsonObj);
// console.log(result);
// 输出结果
util.writeToFile('./file/output.md', result);
这里需要注意的是,在 note.js
中有三个自定义的转换器: backquote
, link
, seperate
,分别表示:反引号,超链接,分割线,依赖包里本身未实现,但是支持自定义,这便是 json2md
的强大之处。
这样,以后拿来 JSON
数据,便可快速转换为 Markdown
文件,简单、直接、有效;最后,可直接将生成的 .md
文件在博客发表:
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!