3

所以这就是问题所在。我从 mongodb 集合中直接导出为 json 平面文件。我试图让我的 phantomjs 应用程序从 MongoDB 读取和解析平面文件,并将其转换为 phantomjs 解析的对象。由于某种原因,我无法正常解析 JSON 字符串。

(注意:没有 jQuery 解决方案。这需要是原始的 javascript)

这是我来自 mongodb 的平面文件。看起来不错:

    { "host" : "www.myfoxphilly.com", "path" : "/category/233430/entertainment", "created_at" : { "$date" : 1375199393295 }, "_id" : { "$oid" : "51f7e0a1dc12a13510000002" } }{ "host" : "www.news9.com", "path" : "/category/112032/news", "created_at" : { "$date" : 1375285798173 }, "_id" : { "$oid" : "51f9322668ee1e660c000001" } }{ "host" : "www.myfoxphilly.com", "path" : "/category/233430/entertainment", "created_at" : { "$date" : 1375285823602 }, "_id" : { "$oid" : "51f9323f68ee1e660c000002" } }

这是尝试解析上述 JSON 平面文件的配置文件

var fs = require('fs');
var data = fs.read('configData.json');
var newdata =  JSON.stringify(data);
var dataobj = eval("["+newdata+"]");
console.log(typeof(newdata));

exports.tests = dataobj;

// Sample object (works fine like this):[{path:'/category/112043/sports' ,host:'www.newson6.com'}];

exports.getFileName = function(test,local) {
return 'results/' + test.host.replace(/\./g,'-').replace(/\:[0-9]+/,'').replace('-com','').replace('www-','') + test.path.replace(/\//g,'-').replace(/\?clienttype=/g, "clienttype") + ((local) ? '-locl' : '-prod')
}

所以当我运行幻影时,我没有得到任何数据。该 JSON 成为一个对象,而不是我在评论部分中的对象示例。

如果我只是替换 JS 通用库平面文件导入并将“数据”作为字符串,它就可以正常工作,如下所示:

var data = '{"host" : "www.myfoxphilly.com", "path" : "/some/path/233409"}';

当我将 JSON 作为字符串导入时,js 通用库文件导入是否存在某种问题?请帮忙。

再一次,没有 jQuery,我会不看就给你投反对票。我<3 jQuery,但你们需要意识到什么时候适合使用(即基于浏览器的js)。

4

1 回答 1

1

我的天啊!你用过eval...... :P 我很惊讶这个问题还没有被 5 次否决。

关于真正的,优秀的问题。

如果@DCoder 实际上已经发布了答案,那么您的问题是您的 JSON。“来自 mongodb 的平面文件”不一定是有效的 JSON。此外,要使其有效,您需要先解析字符串:

  1. 用方括号把它包起来

  2. 确保从 mongo 导出的每个数据行后面都有一个逗号。

  3. 说真的,eval?在转换后的字符串上使用 JSON.parse 两次。

那应该解决它。其他一切看起来都很干净。

(.. eval.. 我不敢相信这种磨砂膏)

于 2013-08-02T05:04:34.040 回答