从mongodb集合导出有效的json

我正在尝试从我使用node和instagram的api创build的mongodb集合中导出有效的json。 我必须错过一些东西,因为它看起来应该超级简单。 我读过其他文章和mongo的文档,特别是关于mongoexport。
我的最终目标是build立一个D3地图。 我从文档中使用了基本的mongoexport命令,它以下面的格式返回了一个json文件:

{'name':'dan'} {'name':'emma'} 

有效的JSON将是:

 [{'name':'dan'}, {'name':'emma'}] 

我知道有这样的解决方法,即使是在每一行的末尾都会出现“$”的崇高文本,然后可能只是添加一个昏迷。 从技术上来说,这样做是正确的。 有一个postbuild议使用JSON.parse,所以我尝试使用fs.readFile,但它返回错误:

 undefined:2 { "attribution" : null, "tags" : [], "location" : { "latitude" : 48.857141667, ^ SyntaxError: Unexpected token {. 

我只需要将整个mongo集合导出为有效的json文件(将成功通过http://jsonlint.com/test )。

任何帮助真的不胜感激。

正如在评论中提到的,直接parsingmongodump的结果可能不是一个好主意。 Mongo不会保证转储中的元素是有效的json(而不是)。

但是,如果您倾向于这样做,则可以使用事件stream来读取换行符分隔的对象stream以及允​​许您的json使用单引号而不是双引号(即hanson )的parsing器 。

那么你的代码可能看起来像这样:

 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对象(用双引号)stream,相同的代码将缩短为:

 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'); })); 

为了清晰起见,跳过error handling。