PhantomJS中解析JSON平面文件的问题(请不要jquery,原始javascript)

Issue with parsing JSON flat file in PhantomJS (NO jquery, raw javascript please)

本文关键字:jquery 原始 javascript JSON 平面文件 问题 PhantomJS      更新时间:2023-09-26

所以问题就在这里。我有一个直接从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')
}

所以当我运行phantom时,我没有得到任何数据。JSON变成了一个单独的对象,而不是我在注释部分中的对象示例。

如果我只是替换JS公共库平面文件导入并使"数据"成为字符串,它就可以正常工作,如下所示:

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

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

再一次,没有jQuery,我会毫不犹豫地投票给你。I<3jQuery,但你们需要意识到什么时候使用它是合适的(即基于浏览器的js)。

天哪!您使用了eval…:P我很惊讶这个问题还没有被否决5次。

关于真实的、极好的问题。

如果@DCoder真的发布了答案,那么您的问题就是JSON。"mongodb的平面文件"不一定是有效的JSON。此外,为了使其有效,您需要首先解析字符串:

  1. 用方括号包裹

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

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

这应该能解决问题。其他一切看起来都很干净。

(..eval..我简直不敢相信这个擦洗)