从 mongodb 集合中导出有效的 json
Posted
技术标签:
【中文标题】从 mongodb 集合中导出有效的 json【英文标题】:Export valid json from mongodb collection 【发布时间】:2014-06-02 12:14:07 【问题描述】:我正在尝试从我使用节点和 instagram 的 api 创建的 mongodb 集合中导出有效的 json。我一定遗漏了一些东西,因为它看起来应该非常简单。我已经阅读了其他帖子和 mongo 的文档,特别是关于 mongoexport。 我的最终目标是建立一个 d3 地图。我使用了文档中的基本 mongoexport 命令,它返回了以下格式的 json 文件:
'name':'dan'
'name':'emma'
有效的 json 是:
['name':'dan',
'name':'emma']
我知道有一些解决方法,即使是在 sublime 文本中找到“$”这样简单的方法,它会到达每一行的末尾,然后可以添加一个昏迷。从技术上知道这样做的正确方法真是太好了。一篇文章建议使用 JSON.parse,所以我尝试使用 fs.readFile 但它返回错误:
undefined:2
"attribution" : null, "tags" : [], "location" : "latitude" : 48.857141667,
^
SyntaxError: Unexpected token .
我只需要将整个 mongo 集合导出到一个有效的 json 文件中(将成功通过 http://jsonlint.com/ 测试)。非常感谢任何帮助。
【问题讨论】:
有点困惑,你为什么使用 mongoexport 而不是 npmjs.org/package/mongoose 之类的东西只是从 mongo 中获取结果...? 我用过一点猫鼬,但总是在使用 Express 时;永远不要只使用一个文件/尝试将 mongodb 集合输出到文件中。在那种情况下猫鼬也会有帮助吗?我查看了文档,但对我来说并不完全清楚。有没有网上看到的例子可以作为参考? 【参考方案1】:使用mongoexport util使用--jsonArray
http://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray
【讨论】:
【参考方案2】:正如 cmets 中提到的,直接解析 mongodump 的结果可能不是一个好主意。 Mongo 不保证转储中的元素是有效的 json(它们不是)。
但是,如果您愿意这样做,您可以使用event-stream 来读取换行符分隔的对象流和允许您的 json 使用单引号而不是双引号的解析器(即 hanson)。
那么你的代码可能看起来像这样:
var es = require('event-stream'),
hanson = require('hanson'),
in = process.stdin,
out = process.stdout;
in //read the input stream
.pipe(es.split()) //split it on newline
.pipe(es.map(function(data, cb)
if (data === '') //necessary due to the last element produced by split
cb();
else
cb(null, hanson.parse(data)); //parse the line with hanson
))
.pipe(es.writeArray(function (err, array) //convert resulting objects to array
var strArray = JSON.stringify(array);
out.write(strArray + '\n'); //write the resulting array to output stream
));
如果您有一个有效的 json 对象流(带双引号),则相同的代码将缩短为:
var es = require('event-stream'),
hanson = require('hanson'),
in = process.stdin,
out = process.stdout;
in
.pipe(es.split())
.pipe(es.parse())
.pipe(es.writeArray(function (err, array)
var strArray = JSON.stringify(array);
out.write(strArray + '\n');
));
为清楚起见跳过了错误处理。
【讨论】:
以上是关于从 mongodb 集合中导出有效的 json的主要内容,如果未能解决你的问题,请参考以下文章