mik*_*1aj 11
我编写了一个简单的脚本来使用 node.js 生成此图:
\n\n\'use strict\';\n\nvar _ = require(\'lodash\');\nvar dataMock = require(\'./somewhere/myDataMock.json\');\n\nvar nodeCounter = 1;\n\nfunction formatEllipsizedText(text, maxLength) {\n if (text.length > maxLength - 1) {\n return text.substring(0, maxLength - 1) + \'\xe2\x80\xa6\';\n } else {\n return text;\n }\n}\n\nfunction json2gvLabel(obj) {\n return _.map(_.keys(obj), function (key) { return \'<\' + key + \'> \' + key; }).join(\'|\');\n}\n\nvar edges = [];\nvar nodes = [];\n\nfunction recurse(parentNode, obj) {\n var myId = nodeCounter++;\n edges.push({from: parentNode, to: myId});\n if (_.isArray(obj)) {\n nodes.push({id: myId, label: \'array\'});\n recurse(myId, obj[0]);\n } else if (!_.isObject(obj)) {\n nodes.push({id: myId, label: formatEllipsizedText(\'\' + obj, 50)});\n } else {\n nodes.push({id: myId, label: json2gvLabel(obj)});\n _.each(obj, function (v, k) {\n recurse(myId + \':\' + k, v);\n });\n }\n}\n\nrecurse(\'root\', dataMock);\n\nconsole.log(\'digraph g {\');\nconsole.log(\'graph [rankdir = "LR", nodesep=0.1, ranksep=0.3];\');\nconsole.log(\'node [fontsize = "16", shape = "record", height=0.1, color=lightblue2];\');\nconsole.log(\'edge [];\');\n\n_.map(nodes, function (n) {\n console.log(n.id + \'[label="\' + n.label + \'"];\');\n});\n_.map(edges, function (e) {\n console.log(e.from + \'->\' + e.to + \';\');\n});\n\nconsole.log(\'}\');\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,在我的脚本中,我将数组折叠为仅一项以可视化结构,而不是显示所有数据。
\n\n然后,为了生成 PDF,我将此脚本的输出(gv 格式)通过管道传输到 graphviz dot:
node makeGraph.js | dot -Tpdf > ~/Desktop/a.pdf\nRun Code Online (Sandbox Code Playgroud)\n\n最终结果如下所示:
\n\n\n| 归档时间: |
|
| 查看次数: |
8261 次 |
| 最近记录: |