所以這裏是問題所在。我有一個從mongodb集合直接導出爲json平面文件。我試圖讓我的phantomjs應用程序讀取並解析來自MongoDB的平面文件,並將其轉換爲phantomjs解析對象。出於某種原因,我無法正常解析JSON字符串。在PhantomJS中解析JSON平面文件問題(NO jquery,請原始javascript)
(注意:無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"}';
是否有某種問題具有共同的JS怎麼回事當我將JSON導入爲字符串時導入庫文件?請幫助。
一次再次,沒有jQuery,我會投票你沒有看。 jQuery,但是你們需要認識到什麼時候它適合使用(即基於瀏覽器的js)。 OMG!
'eval'?你使用'JSON.stringify',但不是'JSON.parse'?另外請注意,您提供的平面文件內容不是有效的JSON。 – DCoder
你對JSON是正確的。我通過json lint運行它,並得到一個錯誤...這是一個mongo錯誤...這是直「mongoexport」...所以它應該是有效的嗯....我會忽略eval評論,直到你可以提供一個非eval答案,這意味着沒有JSON.parse或stringify那些使用eval和沒有json2那樣的蹩腳。 (祝你好運dbag:P) – CharlieTuna
「注意:沒有jQuery解決方案。這需要是原始的javascript」 - 怎麼回事? –