2017-08-08 10 views
1

あなたはいいですねノード内のJSONの解析Javascriptパーサーはコメントが嫌いです

reddit.com/r/picsのJSONをスキャンするプロジェクトがあります。ランダムな画像を引っ張ってWebページに表示します。 Javascriptのパーサーをオフに投げているJSONを開始する前に、https://www.reddit.com/r/pics/.json?jsonp=1

Reddits JSONは「/ **/1(」開始時にいくつかの文字を引っ張る

私は(コードを参照文字の一部を編集regexですることができます)が、最終的にそれは私がこれらを削除する場合は、ファイルをローカルに保存し

SyntaxError: Unexpected string in JSON at position 1

を失敗し、それは罰金と期待どおりに動作するようです。

この問題に取り組むための最良の方法は何ですか?

私は何か完全に欠けていますか?

ありがとうございます!ここで

、私のコードでそのNode.jsの

var express = require('express'); 
var router = express.Router(); 
var request = require('request'); 
var fs = require('fs'); 
const https = require('https'); 


let detailedObject; 
let pageNo = 1; 
let object; 
let lengthofObject; 
let urlImg; 
let newObject; 
var file = fs.createWriteStream("reddit.json"); 



// SAVES REDDIT.JSON TO FILE 
var request = https.get("https://www.reddit.com/r/pics/.json?jsonp=1", response => { 
    response.pipe(file); 
}); 


// RANDOM NUMBER GENERATOR 
function randomNo(num) { 
var randomNo = Math.floor(Math.random() * num) + 1 ; 
    return randomNo; 
} 


//REMOVE WEIRD CHARATCERS IN JSON 
function removeChar(object) { 

    object = object.replace(/\(/g,"").replace(/\)/g,"").replace(/\//g,"").replace(/\*/g,"").replace(/\{/g,""); 

    newObject = JSON.parse(object); 

    return newObject; 

} 


function fetchImg() { 

fs.readFile('./reddit.json', 'utf8', function (err, data) { 
    if (err) throw err; // we'll not consider error handling for now 

    if (data) { 


     data = data.trim(); 

     var storage = removeChar(data); 

     detailedObject = storage.data.children; 

     lengthofObject = detailedObject.length; 

     var randomValue = randomNo(lengthofObject); 

     urlImg = detailedObject[randomValue].data.url 

     return urlImg; 

    }; 


}); 

} 

router.get('/', (req, res, next) => { 
    //query needs to be inside function 

fetchImg(); 

return res.render('index', {"urlImg": urlImg}); 

}); 



module.exports = router; 

UPDATE

に私は問題、Reddits JSONは

/**/1(

に包まれ、そこです見つけました私が見逃したJSONの最後の閉じ括弧

)

これらをすべて削除すると、stringifyなしで解析されます。私が把握する必要があるのは、開始5文字(ページ番号の量に応じて増加する)と最後の1文字を動的に削除する方法です。

私はそれをすべて正規表現にしてからスラッシュ.jsonはFSによってダウンロードされた後

を解決しようとブラケットがクエリ全体で除去して...、私はすぐに最初の6つの文字と最後の文字を削除するには、スライスを使用しています。その最初のnewObject = JSON.parse(object);

JSON.stringify、その後、あなたは次のようになります。私は、JSONがランダムJSON私のアプリは、エラーがここにある

sliceObject = object.slice(6 + pageReducer, -1); 

答えて

1
//REMOVE WEIRD CHARATCERS IN JSON 
function removeChar(object) { 

    object = object.replace(/\(/g,"").replace(/\)/g,"").replace(/\//g,"").replace(/\*/g,"").replace(/\{/g,""); 

    newObject = JSON.parse(object); 

    return newObject; 

} 

を引っ張る依存からより多くの文字を低減変数pageReducerを持っていますJSON.parseを使用してコードを処理することができます。

「オブジェクト」パラメータは無効な文字を削除したあともまだJavaScript文字列ですが、有効なJSON編集可能オブジェクトではないためです。 JSON.stringifyは有効なJSON文字列に変換します。 JSON.parseは有効なJSON文字列を解析できます。

+0

私は今日それを試して、報告してくれてありがとう! – lycrake

+0

こんにちは、私はそれを与えました。 JSON.parseの前にJSON.stringifyで追加しました。それは文字列を解析するようだが、私がコンソールにしようとするたびに。コンソールが返すfetchImgに結果を記録します。 'detailedObject = storage.data.children; ^ はTypeError:プロパティを読み取ることができませんundefined' の「子供」 – lycrake

+1

だから問題は、質問に更新されます私を見つけた....私はどちらかのオブジェクトをCONSOLE.LOGことができないようです。まだ解決策が見つかりません – lycrake

関連する問題