あなたはいいですねノード内の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);
私は今日それを試して、報告してくれてありがとう! – lycrake
こんにちは、私はそれを与えました。 JSON.parseの前にJSON.stringifyで追加しました。それは文字列を解析するようだが、私がコンソールにしようとするたびに。コンソールが返すfetchImgに結果を記録します。 'detailedObject = storage.data.children; ^ はTypeError:プロパティを読み取ることができませんundefined' の「子供」 – lycrake
だから問題は、質問に更新されます私を見つけた....私はどちらかのオブジェクトをCONSOLE.LOGことができないようです。まだ解決策が見つかりません – lycrake