JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了

背景


前几年(2015~2018)都是手动直接将笔记(不含图书详情:封面、ISBN、出版信息等)发布,看到大家最近都在做自我复盘,今天突然有个想法:把阅读笔记做成 Markdown 格式的,这时就需要进行简单的数据处理,即: JSON 数据转换为 Markdown


打开浏览器,在Github直接发现大神们已经造好的轮子:json2md。文档一看就明白了,而且最关键的是还可以自行扩展,厉害了!!

image.png


输入数据源:json文件


image.png

我平时的读书笔记专门记录在一个小Web网站上,每读完一本书,相关的图书信息、笔记都会录入到 MongoDB(数据来源:豆瓣图书爬虫😃),当然,图书的封面目前还是豆瓣的外链。所以先从 MongoDB 中导出数据,导出的原始数据长这样:

image.png


转换


把大象放进冰箱需要几步?


这个转换例子很简单,但是还是分几个步骤,我们看下过程:


  1. 读入input.json,根据需要,选择属性,转为json2md可以接收的格式,生成中间临时文件:temp.json;


  1. 读入临时的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 的强大之处。

image.png


输出文件:md文件


image.png


发布博客


这样,以后拿来 JSON 数据,便可快速转换为 Markdown 文件,简单、直接、有效;最后,可直接将生成的 .md 文件在博客发表:

image.png


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
20天前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
21天前
|
JSON 前端开发 JavaScript
前端使用lottie-web,使用AE导出的JSON动画贴心教程
前端使用lottie-web,使用AE导出的JSON动画贴心教程
|
22天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第9天】mongoDB查看数据的插入日志
313 4
|
22天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第2天】mongoDB查看数据的插入日志
316 0
|
3天前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
54 1
|
12天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第22天】mongoDB查看数据的插入日志
26 3
|
21天前
|
SQL 资源调度 NoSQL
实时计算 Flink版产品使用合集之使用Flink CDC SQL MongoDB Connector时,可以采取什么措施来提升数据消费速率
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
22天前
|
人工智能 NoSQL atlas
Fireworks AI和MongoDB:依托您的数据,借助优质模型,助力您开发高速AI应用
我们欣然宣布MongoDB与 Fireworks AI 正携手合作让客户能够利用生成式人工智能 (AI)更快速、更高效、更安全地开展创新活动
2632 1
|
22天前
|
分布式计算 DataWorks NoSQL
DataWorks产品使用合集之DataWorks 中同步 MongoDB 数据的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
39 4
|
22天前
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
30 3