在PhantomJS中解析JSON平面文件时出现问题(无jquery,请使用原始javascript)

在PhantomJS中解析JSON平面文件时出现问题(无jquery,请使用原始javascript),javascript,mongodb,phantomjs,commonjs,Javascript,Mongodb,Phantomjs,Commonjs,这就是问题所在。我直接将mongodb集合导出为json平面文件。我试图让我的phantomjs应用程序从MongoDB读取和解析平面文件,并将其转换为phantomjs要解析的对象。由于某些原因,我无法正常解析JSON字符串 (注意:没有jQuery解决方案。这需要是原始javascript) 这是我来自mongodb的平面文件。看起来不错: { "host" : "www.myfoxphilly.com", "path" : "/category/233430/entertainme

这就是问题所在。我直接将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 common library平面文件导入并将“data”设置为字符串,它就可以正常工作,如下所示:

var data = '{"host" : "www.myfoxphilly.com", "path" : "/some/path/233409"}';
当我将JSON作为字符串导入时,js公共库文件导入是否存在某种问题?请帮忙


再一次,没有jQuery,我会投你一票而不看。我天哪!您使用了
eval
…:P我很惊讶这个问题还没有被否决5次

关于一个真实的,极好的问题

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

  • 用方括号把它包起来

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

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

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


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

    eval
    ?您使用的是
    JSON.stringify
    ,而不是
    JSON.parse
    ?另外,请注意,您提供的平面文件内容不是有效的JSON。关于JSON,您是对的。我通过json lint运行了它,得到了一个错误。。。这是mongo的错误吗。。。这是直接的“mongoexport”。。。所以它应该是有效的,嗯。。。。我将忽略eval注释,直到您可以提供一个非eval的答案,这意味着没有JSON.parse或stringify,因为使用eval的人,没有json2,因为这是蹩脚的。(祝你好运dbag:P)“注意:没有jQuery解决方案。这需要原始javascript”——为什么?每个人都建议使用
    JSON.parse
    或shim而不是
    eval
    @Jan。。。这是非浏览器js。理想情况下,我认为最好避免在NodeJ和commonjs应用程序中使用jquery。而且,我发现太多的人依赖于jQuery,而且实际上没有JavaScript的基础。这是个问题,你们让我一个人待在eval!但谢谢你,克利夫·巴恩斯,这就是问题所在。我不喜欢花更多的时间来惩罚“eval”的使用,而不是暗示它为什么会不好。我还不明白为什么JSON.parse需要运行两次