2013-08-01 59 views
2

所以這裏是問題所在。我有一個從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!

+1

'eval'?你使用'JSON.stringify',但不是'JSON.parse'?另外請注意,您提供的平面文件內容不是有效的JSON。 – DCoder

+0

你對JSON是正確的。我通過json lint運行它,並得到一個錯誤...這是一個mongo錯誤...這是直「mongoexport」...所以它應該是有效的嗯....我會忽略eval評論,直到你可以提供一個非eval答案,這意味着沒有JSON.parse或stringify那些使用eval和沒有json2那樣的蹩腳。 (祝你好運dbag:P) – CharlieTuna

+0

「注意:沒有jQuery解決方案。這需要是原始的javascript」 - 怎麼回事? –

回答

1

OMG!你用eval ...:P我很驚訝這個問題還沒有被投下5次。

關於真實,優秀的問題。

你的問題,如果@DCoder實際上已經發布了答案,是你的JSON。 「來自mongodb的平面文件」不一定是有效的JSON。此外,爲了使之有效,你會需要先分析字符串:

  1. 包裝在方括號

  2. 請確保您有從蒙戈導出的每個數據線後一個逗號。

  3. 說真的,eval?在轉換的字符串上使用JSON.parse兩次。

這應該解決它。其他一切看起來都很乾淨

(.. eval ..我不敢相信這個擦洗)

+0

你們讓我一個人關於評估!但是,謝謝,懸崖邊緣,這是問題。 – CharlieTuna