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 は、コメント セクションにあるオブジェクトの例ではなく、1 つのオブジェクトになります。

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 を 2 回使用します。

それで解決するはずです。それ以外はきれいに見えます。

(.. eval.. このスクラブが信じられない)

于 2013-08-02T05:04:34.040 に答える