现在已有gitbook的环境和配置:

而且有多个gitbook

其中的book.json中的很多配置都是相同的
而此处更新了其中一个,比如换了hint的插件:
【记录】gitbook换用更好看的hint callout提示
导致其他的gitbook的book.json都要更新,很是麻烦和不智能。
现在在想要:
看看此处的book.json的公共部分,比如
plugins
可以提取出去
或者说,json文件是否可以包含include其他的json
总之希望实现把公共部分提取出去的效果就好。
json include other json
php – how to include one JSON into another JSON? – Stack Overflow
好像没有直接json中直接内部include other json的
实在不行,考虑去:
把共有的,共同部分的book.json弄出一个book_template.json
然后保存共有部分,
每个gitbook只填写自己的部分
然后用其他工具处理合并成最终的book.json
然后再去执行gitook的其他命令
此过程,或许可以基于现有的makefile中:

调用其他工具,最好是js代码,去实现
xml – Include a json file in an another json file only with json – Stack Overflow
How to set reference of one JSON object to another in JSON file – Stack Overflow
或许可以:
makefile中,执行python脚本,实现上面的步骤?
makefile中,执行js脚本?
至此,已经基本上清楚处理过程了:
提取出book_common.json
整理出单独的gitbook的自己的book_current.json
写python脚本merge_book_json.py处理生成book.json
Makefile中调用python脚本
剩下的就是:
抽空把book.json的公共部分的提取,和之前要做的,gitbook的makefile的公共部分的提取,放在一起,一次性搞定就好
而公共部分的Makefile的提取,则大概是:
提取出公共的Makefile,放在所有的gitbook的父目录
每个gitbook目录中的Makefile写自己的部分,调用公共的Makefile
不过,此处先去完成book.json的提取和合并处理的部分。
先去弄出来:
/Users/crifan/GitBook/Library/Import/book_common.json
<code>{
"title": "Gitbook的书名",
"description": "gitbook书的描述",
"author": "Crifan Li <admin@crifan.org>",
"language": "zh-hans",
"gitbook": "3.2.3",
"root": "./src",
"links": {
"sidebar": {
"主页": "https://www.crifan.org"
}
},
"plugins": [
"theme-comscore",
"-lunr",
"-search",
"search-plus",
"disqus",
"-highlight",
"prism",
"prism-themes",
"github-buttons",
"splitter",
"-sharing",
"sharing-plus",
"tbfed-pagefooter",
"expandable-chapters-small",
"ga",
"donate",
"sitemap-general",
"copy-code-button",
"-alerts",
"-bootstrap-callout",
"callouts",
"toolbar-button"
],
"pluginsConfig": {
"callouts": {
"showTypeInHeader": false
},
"theme-default": {
"showLevel": true
},
"disqus": {
"shortName": "crifan"
},
"prism": {
"css": [
"prism-themes/themes/prism-atom-dark.css"
]
},
"github-buttons": {
"buttons": [
{
"user": "crifan",
"repo": "gitbook_name",
"type": "star",
"count": true,
"size": "small"
}, {
"user": "crifan",
"type": "follow",
"width": "120",
"count": false,
"size": "small"
}
]
},
"sharing": {
"douban": false,
"facebook": true,
"google": false,
"hatenaBookmark": false,
"instapaper": false,
"line": false,
"linkedin": false,
"messenger": false,
"pocket": false,
"qq": true,
"qzone": false,
"stumbleupon": false,
"twitter": true,
"viber": false,
"vk": false,
"weibo": true,
"whatsapp": false,
"all": [
"douban",
"facebook",
"google",
"instapaper",
"line",
"linkedin",
"messenger",
"pocket",
"qq",
"qzone",
"stumbleupon",
"twitter",
"viber",
"vk",
"weibo",
"whatsapp"
]
},
"tbfed-pagefooter": {
"copyright": "crifan.org,使用<a href='https://creativecommons.org/licenses/by-sa/4.0/deed.zh'>知识署名-相同方式共享4.0协议</a>发布",
"modify_label": "该文件修订时间:",
"modify_format": "YYYY-MM-DD HH:mm:ss"
},
"ga": {
"token": "UA-28297199-1"
},
"donate": {
"wechat": "https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg",
"alipay": "https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg",
"title": "",
"button": "打赏",
"alipayText": "支付宝打赏给Crifan",
"wechatText": "微信打赏给Crifan"
},
"sitemap-general": {
"prefix": "https://book.crifan.org/gitbook/gitbook_name/website/"
},
"toolbar-button": {
"icon": "fa-file-pdf-o",
"label": "下载PDF",
"url": "http://book.crifan.org/books/gitbook_name/pdf/gitbook_name.pdf"
}
}
}
</code>以及:
/Users/crifan/GitBook/Library/Import/youdao_note_summary/book_current.json
<code>{
"title": "有道云笔记和云协作使用总结",
"description": "总结之前使用过有道云笔记和有道云协作的心得供参考",
"pluginsConfig": {
"github-buttons": {
"buttons": [
{
"repo": "youdao_note_summary"
}
]
},
"sitemap-general": {
"prefix": "https://book.crifan.org/gitbook/youdao_note_summary/website/"
},
"toolbar-button": {
"url": "http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf"
}
}
}
</code>希望写Python可以把后者book_current.json的内容,合并到book_common.json中,生成完整的:
book.json:

然后去:
【总结】
虽然原理上用OrderedDict,实现了保持之前的json的字段顺序,但是由于两个json的dict合并后,字段顺序不是所希望的,所以最后放弃,还是用之前的顺序了。
最后,用:
<code>#!/usr/bin/python
# -*- coding: utf-8 -*-
CurrentGitbookName = "youdao_note_summary"
BookJsonTemplateFilename = "book_common.json"
BookJsonCurrentFilename = "book_current.json"
BookJsonOutputFilename = "book.json"
# BookJsonTemplateFilename = "a.json"
# BookJsonCurrentFilename = "b.json"
# BookJsonOutputFilename = "c.json"
import os
import json
from pprint import pprint
import sys
import copy
import codecs
# from collections import OrderedDict
################################################################################
# Internal Function
################################################################################
def recursiveMergeDict(aDict, bDict):
"""
Recursively merge dict a to b, return merged dict b
Note: Sub dict and sub list's won't be overwritten but also updated/merged
example:
(1) input and output example:
input:
{
"keyStr": "strValueA",
"keyInt": 1,
"keyBool": true,
"keyList": [
{
"index0Item1": "index0Item1",
"index0Item2": "index0Item2"
},
{
"index1Item1": "index1Item1"
},
{
"index2Item1": "index2Item1"
}
]
}
and
{
"keyStr": "strValueB",
"keyInt": 2,
"keyList": [
{
"index0Item1": "index0Item1_b"
},
{
"index1Item1": "index1Item1_b"
}
]
}
output:
{
"keyStr": "strValueB",
"keyBool": true,
"keyInt": 2,
"keyList": [
{
"index0Item1": "index0Item1_b",
"index0Item2": "index0Item2"
},
{
"index1Item1": "index1Item1_b"
},
{
"index2Item1": "index2Item1"
}
]
}
(2) code usage example:
import copy
cDict = recursiveMergeDict(aDict, copy.deepcopy(bDict))
Note:
bDict should use deepcopy, otherwise will be altered after call this function !!!
"""
aDictItems = None
if (sys.version_info[0] == 2): # is python 2
aDictItems = aDict.iteritems()
else: # is python 3
aDictItems = aDict.items()
for aKey, aValue in aDictItems:
# print("------ [%s]=%s" % (aKey, aValue))
if aKey not in bDict:
bDict[aKey] = aValue
else:
bValue = bDict[aKey]
# print("aValue=%s" % aValue)
# print("bValue=%s" % bValue)
if isinstance(aValue, dict):
recursiveMergeDict(aValue, bValue)
elif isinstance(aValue, list):
aValueListLen = len(aValue)
bValueListLen = len(bValue)
bValueListMaxIdx = bValueListLen - 1
for aListIdx in range(aValueListLen):
# print("---[%d]" % aListIdx)
aListItem = aValue[aListIdx]
# print("aListItem=%s" % aListItem)
if aListIdx <= bValueListMaxIdx:
bListItem = bValue[aListIdx]
# print("bListItem=%s" % bListItem)
recursiveMergeDict(aListItem, bListItem)
else:
# print("bDict=%s" % bDict)
# print("aKey=%s" % aKey)
# print("aListItem=%s" % aListItem)
bDict[aKey].append(aListItem)
return bDict
def saveJsonToFile(jsonDict, fullFilename, indent=2, fileEncoding="utf-8"):
"""
save dict json into file
for non-ascii string, output encoded string, without \uxxxx
"""
with codecs.open(fullFilename, 'w', encoding="utf-8") as outputFp:
json.dump(jsonDict, outputFp, indent=indent, ensure_ascii=False)
################################################################################
# Main Part
################################################################################
templateJson = {}
currentJson = {}
currPath = os.getcwd()
print("currPath=%s" % currPath)
bookJsonTemplateFullPath = os.path.join(currPath, BookJsonTemplateFilename)
print("bookJsonTemplateFullPath=%s" % bookJsonTemplateFullPath)
# /Users/crifan/GitBook/Library/Import/book_common.json
with open(bookJsonTemplateFullPath) as templateJsonFp:
templateJson = json.load(templateJsonFp, encoding="utf-8")
# templateJson = json.load(templateJsonFp, encoding="utf-8", object_pairs_hook=OrderedDict)
# templateJson = OrderedDict(templateJson)
# print("type(templateJson)=%s" % (type(templateJson))) #type(templateJson)=<class 'collections.OrderedDict'>
bookJsonCurrentFullPath = os.path.join(currPath, CurrentGitbookName, BookJsonCurrentFilename)
print("bookJsonCurrentFullPath=%s" % bookJsonCurrentFullPath)
with open(bookJsonCurrentFullPath) as currentJsonFp:
currentJson = json.load(currentJsonFp, encoding="utf-8")
# currentJson = json.load(currentJsonFp, encoding="utf-8", object_pairs_hook=OrderedDict)
# currentJson = OrderedDict(currentJson)
pprint("/"*80)
pprint(templateJson)
pprint("/"*80)
pprint(currentJson)
pprint("/"*80)
bookJson = recursiveMergeDict(templateJson, copy.deepcopy(currentJson))
pprint("-a"*40)
pprint(templateJson)
pprint("-b"*40)
pprint(currentJson)
pprint("-c"*40)
pprint(bookJson)
# print("type(templateJson)=%s" % (type(templateJson)))
# print("type(currentJson)=%s" % (type(currentJson)))
# print("type(bookJson)=%s" % (type(bookJson)))
bookJsonFullPath = os.path.join(currPath, CurrentGitbookName, BookJsonOutputFilename)
print("bookJsonFullPath=%s" % bookJsonFullPath)
saveJsonToFile(bookJson, bookJsonFullPath)
</code>输出log:
<code>➜ Import cd /Users/crifan/GitBook/Library/Import ; env "PYTHONIOENCODING=UTF-8" "PYTHONUNBUFFERED=1" /usr/bin/python /Users/crifan/.vscode/extensions/ms-python.python-2018.5.0/pythonFiles/PythonTools/visualstudio_py_launcher.py /Users/crifan/GitBook/Library/Import 57813 34806ad9-833a-4524-8cd6-18ca4aa74f14 RedirectOutput,RedirectOutput /Users/crifan/GitBook/Library/Import/generateBookJson.py
currPath=/Users/crifan/GitBook/Library/Import
bookJsonTemplateFullPath=/Users/crifan/GitBook/Library/Import/book_common.json
bookJsonCurrentFullPath=/Users/crifan/GitBook/Library/Import/youdao_note_summary/book_current.json
'////////////////////////////////////////////////////////////////////////////////'
{u'author': u'Crifan Li <admin@crifan.org>',
u'description': u'gitbook\u4e66\u7684\u63cf\u8ff0',
u'gitbook': u'3.2.3',
u'language': u'zh-hans',
u'links': {u'sidebar': {u'\u4e3b\u9875': u'https://www.crifan.org'}},
u'plugins': [u'theme-comscore',
u'-lunr',
u'-search',
u'search-plus',
u'disqus',
u'-highlight',
u'prism',
u'prism-themes',
u'github-buttons',
u'splitter',
u'-sharing',
u'sharing-plus',
u'tbfed-pagefooter',
u'expandable-chapters-small',
u'ga',
u'donate',
u'sitemap-general',
u'copy-code-button',
u'-alerts',
u'-bootstrap-callout',
u'callouts',
u'toolbar-button'],
u'pluginsConfig': {u'callouts': {u'showTypeInHeader': False},
u'disqus': {u'shortName': u'crifan'},
u'donate': {u'alipay': u'https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg',
u'alipayText': u'\u652f\u4ed8\u5b9d\u6253\u8d4f\u7ed9Crifan',
u'button': u'\u6253\u8d4f',
u'title': u'',
u'wechat': u'https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg',
u'wechatText': u'\u5fae\u4fe1\u6253\u8d4f\u7ed9Crifan'},
u'ga': {u'token': u'UA-28297199-1'},
u'github-buttons': {u'buttons': [{u'count': True,
u'repo': u'gitbook_name',
u'size': u'small',
u'type': u'star',
u'user': u'crifan'},
{u'count': False,
u'size': u'small',
u'type': u'follow',
u'user': u'crifan',
u'width': u'120'}]},
u'prism': {u'css': [u'prism-themes/themes/prism-atom-dark.css']},
u'sharing': {u'all': [u'douban',
u'facebook',
u'google',
u'instapaper',
u'line',
u'linkedin',
u'messenger',
u'pocket',
u'qq',
u'qzone',
u'stumbleupon',
u'twitter',
u'viber',
u'vk',
u'weibo',
u'whatsapp'],
u'douban': False,
u'facebook': True,
u'google': False,
u'hatenaBookmark': False,
u'instapaper': False,
u'line': False,
u'linkedin': False,
u'messenger': False,
u'pocket': False,
u'qq': True,
u'qzone': False,
u'stumbleupon': False,
u'twitter': True,
u'viber': False,
u'vk': False,
u'weibo': True,
u'whatsapp': False},
u'sitemap-general': {u'prefix': u'https://book.crifan.org/gitbook/gitbook_name/website/'},
u'tbfed-pagefooter': {u'copyright': u"crifan.org\uff0c\u4f7f\u7528<a href='https://creativecommons.org/licenses/by-sa/4.0/deed.zh'>\u77e5\u8bc6\u7f72\u540d-\u76f8\u540c\u65b9\u5f0f\u5171\u4eab4.0\u534f\u8bae</a>\u53d1\u5e03",
u'modify_format': u'YYYY-MM-DD HH:mm:ss',
u'modify_label': u'\u8be5\u6587\u4ef6\u4fee\u8ba2\u65f6\u95f4\uff1a'},
u'theme-default': {u'showLevel': True},
u'toolbar-button': {u'icon': u'fa-file-pdf-o',
u'label': u'\u4e0b\u8f7dPDF',
u'url': u'http://book.crifan.org/books/gitbook_name/pdf/gitbook_name.pdf'}},
u'root': u'./src',
u'title': u'Gitbook\u7684\u4e66\u540d'}
'////////////////////////////////////////////////////////////////////////////////'
{u'description': u'\u603b\u7ed3\u4e4b\u524d\u4f7f\u7528\u8fc7\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u6709\u9053\u4e91\u534f\u4f5c\u7684\u5fc3\u5f97\u4f9b\u53c2\u8003',
u'pluginsConfig': {u'github-buttons': {u'buttons': [{u'repo': u'youdao_note_summary'}]},
u'sitemap-general': {u'prefix': u'https://book.crifan.org/gitbook/youdao_note_summary/website/'},
u'toolbar-button': {u'url': u'http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf'}},
u'title': u'\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u4e91\u534f\u4f5c\u4f7f\u7528\u603b\u7ed3'}
'////////////////////////////////////////////////////////////////////////////////'
'-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a'
{u'author': u'Crifan Li <admin@crifan.org>',
u'description': u'gitbook\u4e66\u7684\u63cf\u8ff0',
u'gitbook': u'3.2.3',
u'language': u'zh-hans',
u'links': {u'sidebar': {u'\u4e3b\u9875': u'https://www.crifan.org'}},
u'plugins': [u'theme-comscore',
u'-lunr',
u'-search',
u'search-plus',
u'disqus',
u'-highlight',
u'prism',
u'prism-themes',
u'github-buttons',
u'splitter',
u'-sharing',
u'sharing-plus',
u'tbfed-pagefooter',
u'expandable-chapters-small',
u'ga',
u'donate',
u'sitemap-general',
u'copy-code-button',
u'-alerts',
u'-bootstrap-callout',
u'callouts',
u'toolbar-button'],
u'pluginsConfig': {u'callouts': {u'showTypeInHeader': False},
u'disqus': {u'shortName': u'crifan'},
u'donate': {u'alipay': u'https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg',
u'alipayText': u'\u652f\u4ed8\u5b9d\u6253\u8d4f\u7ed9Crifan',
u'button': u'\u6253\u8d4f',
u'title': u'',
u'wechat': u'https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg',
u'wechatText': u'\u5fae\u4fe1\u6253\u8d4f\u7ed9Crifan'},
u'ga': {u'token': u'UA-28297199-1'},
u'github-buttons': {u'buttons': [{u'count': True,
u'repo': u'gitbook_name',
u'size': u'small',
u'type': u'star',
u'user': u'crifan'},
{u'count': False,
u'size': u'small',
u'type': u'follow',
u'user': u'crifan',
u'width': u'120'}]},
u'prism': {u'css': [u'prism-themes/themes/prism-atom-dark.css']},
u'sharing': {u'all': [u'douban',
u'facebook',
u'google',
u'instapaper',
u'line',
u'linkedin',
u'messenger',
u'pocket',
u'qq',
u'qzone',
u'stumbleupon',
u'twitter',
u'viber',
u'vk',
u'weibo',
u'whatsapp'],
u'douban': False,
u'facebook': True,
u'google': False,
u'hatenaBookmark': False,
u'instapaper': False,
u'line': False,
u'linkedin': False,
u'messenger': False,
u'pocket': False,
u'qq': True,
u'qzone': False,
u'stumbleupon': False,
u'twitter': True,
u'viber': False,
u'vk': False,
u'weibo': True,
u'whatsapp': False},
u'sitemap-general': {u'prefix': u'https://book.crifan.org/gitbook/gitbook_name/website/'},
u'tbfed-pagefooter': {u'copyright': u"crifan.org\uff0c\u4f7f\u7528<a href='https://creativecommons.org/licenses/by-sa/4.0/deed.zh'>\u77e5\u8bc6\u7f72\u540d-\u76f8\u540c\u65b9\u5f0f\u5171\u4eab4.0\u534f\u8bae</a>\u53d1\u5e03",
u'modify_format': u'YYYY-MM-DD HH:mm:ss',
u'modify_label': u'\u8be5\u6587\u4ef6\u4fee\u8ba2\u65f6\u95f4\uff1a'},
u'theme-default': {u'showLevel': True},
u'toolbar-button': {u'icon': u'fa-file-pdf-o',
u'label': u'\u4e0b\u8f7dPDF',
u'url': u'http://book.crifan.org/books/gitbook_name/pdf/gitbook_name.pdf'}},
u'root': u'./src',
u'title': u'Gitbook\u7684\u4e66\u540d'}
'-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b-b'
{u'description': u'\u603b\u7ed3\u4e4b\u524d\u4f7f\u7528\u8fc7\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u6709\u9053\u4e91\u534f\u4f5c\u7684\u5fc3\u5f97\u4f9b\u53c2\u8003',
u'pluginsConfig': {u'github-buttons': {u'buttons': [{u'repo': u'youdao_note_summary'}]},
u'sitemap-general': {u'prefix': u'https://book.crifan.org/gitbook/youdao_note_summary/website/'},
u'toolbar-button': {u'url': u'http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf'}},
u'title': u'\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u4e91\u534f\u4f5c\u4f7f\u7528\u603b\u7ed3'}
'-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c-c'
{u'author': u'Crifan Li <admin@crifan.org>',
u'description': u'\u603b\u7ed3\u4e4b\u524d\u4f7f\u7528\u8fc7\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u6709\u9053\u4e91\u534f\u4f5c\u7684\u5fc3\u5f97\u4f9b\u53c2\u8003',
u'gitbook': u'3.2.3',
u'language': u'zh-hans',
u'links': {u'sidebar': {u'\u4e3b\u9875': u'https://www.crifan.org'}},
u'plugins': [u'theme-comscore',
u'-lunr',
u'-search',
u'search-plus',
u'disqus',
u'-highlight',
u'prism',
u'prism-themes',
u'github-buttons',
u'splitter',
u'-sharing',
u'sharing-plus',
u'tbfed-pagefooter',
u'expandable-chapters-small',
u'ga',
u'donate',
u'sitemap-general',
u'copy-code-button',
u'-alerts',
u'-bootstrap-callout',
u'callouts',
u'toolbar-button'],
u'pluginsConfig': {u'callouts': {u'showTypeInHeader': False},
u'disqus': {u'shortName': u'crifan'},
u'donate': {u'alipay': u'https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg',
u'alipayText': u'\u652f\u4ed8\u5b9d\u6253\u8d4f\u7ed9Crifan',
u'button': u'\u6253\u8d4f',
u'title': u'',
u'wechat': u'https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg',
u'wechatText': u'\u5fae\u4fe1\u6253\u8d4f\u7ed9Crifan'},
u'ga': {u'token': u'UA-28297199-1'},
u'github-buttons': {u'buttons': [{u'count': True,
u'repo': u'youdao_note_summary',
u'size': u'small',
u'type': u'star',
u'user': u'crifan'},
{u'count': False,
u'size': u'small',
u'type': u'follow',
u'user': u'crifan',
u'width': u'120'}]},
u'prism': {u'css': [u'prism-themes/themes/prism-atom-dark.css']},
u'sharing': {u'all': [u'douban',
u'facebook',
u'google',
u'instapaper',
u'line',
u'linkedin',
u'messenger',
u'pocket',
u'qq',
u'qzone',
u'stumbleupon',
u'twitter',
u'viber',
u'vk',
u'weibo',
u'whatsapp'],
u'douban': False,
u'facebook': True,
u'google': False,
u'hatenaBookmark': False,
u'instapaper': False,
u'line': False,
u'linkedin': False,
u'messenger': False,
u'pocket': False,
u'qq': True,
u'qzone': False,
u'stumbleupon': False,
u'twitter': True,
u'viber': False,
u'vk': False,
u'weibo': True,
u'whatsapp': False},
u'sitemap-general': {u'prefix': u'https://book.crifan.org/gitbook/youdao_note_summary/website/'},
u'tbfed-pagefooter': {u'copyright': u"crifan.org\uff0c\u4f7f\u7528<a href='https://creativecommons.org/licenses/by-sa/4.0/deed.zh'>\u77e5\u8bc6\u7f72\u540d-\u76f8\u540c\u65b9\u5f0f\u5171\u4eab4.0\u534f\u8bae</a>\u53d1\u5e03",
u'modify_format': u'YYYY-MM-DD HH:mm:ss',
u'modify_label': u'\u8be5\u6587\u4ef6\u4fee\u8ba2\u65f6\u95f4\uff1a'},
u'theme-default': {u'showLevel': True},
u'toolbar-button': {u'icon': u'fa-file-pdf-o',
u'label': u'\u4e0b\u8f7dPDF',
u'url': u'http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf'}},
u'root': u'./src',
u'title': u'\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u4e91\u534f\u4f5c\u4f7f\u7528\u603b\u7ed3'}
bookJsonFullPath=/Users/crifan/GitBook/Library/Import/youdao_note_summary/book.json
➜ Import
</code>输出book.json文件:
<code>{
"description": "总结之前使用过有道云笔记和有道云协作的心得供参考",
"links": {
"sidebar": {
"主页": "https://www.crifan.org"
}
},
"author": "Crifan Li <admin@crifan.org>",
"title": "有道云笔记和云协作使用总结",
"gitbook": "3.2.3",
"language": "zh-hans",
"plugins": [
"theme-comscore",
"-lunr",
"-search",
"search-plus",
"disqus",
"-highlight",
"prism",
"prism-themes",
"github-buttons",
"splitter",
"-sharing",
"sharing-plus",
"tbfed-pagefooter",
"expandable-chapters-small",
"ga",
"donate",
"sitemap-general",
"copy-code-button",
"-alerts",
"-bootstrap-callout",
"callouts",
"toolbar-button"
],
"pluginsConfig": {
"toolbar-button": {
"url": "http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf",
"icon": "fa-file-pdf-o",
"label": "下载PDF"
},
"sitemap-general": {
"prefix": "https://book.crifan.org/gitbook/youdao_note_summary/website/"
},
"sharing": {
"qq": true,
"douban": false,
"all": [
"douban",
"facebook",
"google",
"instapaper",
"line",
"linkedin",
"messenger",
"pocket",
"qq",
"qzone",
"stumbleupon",
"twitter",
"viber",
"vk",
"weibo",
"whatsapp"
],
"google": false,
"stumbleupon": false,
"hatenaBookmark": false,
"twitter": true,
"vk": false,
"linkedin": false,
"instapaper": false,
"pocket": false,
"weibo": true,
"viber": false,
"facebook": true,
"qzone": false,
"messenger": false,
"line": false,
"whatsapp": false
},
"tbfed-pagefooter": {
"modify_format": "YYYY-MM-DD HH:mm:ss",
"modify_label": "该文件修订时间:",
"copyright": "crifan.org,使用<a href='https://creativecommons.org/licenses/by-sa/4.0/deed.zh'>知识署名-相同方式共享4.0协议</a>发布"
},
"github-buttons": {
"buttons": [
{
"repo": "youdao_note_summary",
"count": true,
"type": "star",
"user": "crifan",
"size": "small"
},
{
"count": false,
"width": "120",
"type": "follow",
"user": "crifan",
"size": "small"
}
]
},
"disqus": {
"shortName": "crifan"
},
"prism": {
"css": [
"prism-themes/themes/prism-atom-dark.css"
]
},
"ga": {
"token": "UA-28297199-1"
},
"theme-default": {
"showLevel": true
},
"donate": {
"alipay": "https://www.crifan.org/files/res/crifan_com/crifan_alipay_pay.jpg",
"title": "",
"alipayText": "支付宝打赏给Crifan",
"button": "打赏",
"wechatText": "微信打赏给Crifan",
"wechat": "https://www.crifan.org/files/res/crifan_com/crifan_wechat_pay.jpg"
},
"callouts": {
"showTypeInHeader": false
}
},
"root": "./src"
}
</code>
基本上满足了:
从book_common.json和book_current.json两个json文件中,合并dict数据,输出到book.json中的目的。