希望你很好解析節點中的Reddits JSON。 Javascript解析器不喜歡評論
我有一個項目,我想掃描reddit.com/r/pics的JSON。拉一個隨機圖像並在網頁上顯示。
在 https://www.reddit.com/r/pics/.json?jsonp=1Reddits JSON在開始拉動某些字符JSON開始之前「/ **/1(」,其是投擲關閉的Javascript解析器。
我正則表達式編輯的某些字符(見代碼),但最終失敗
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個字符和最後一個字符。我有一個變量pageReducer減少從JSON,這取決於隨機JSON我的應用程序拉
sliceObject = object.slice(6 + pageReducer, -1);
謝謝你,我今天會測試它並報告回來! – lycrake
你好,我已經給了一個去。我在JSON.parse之前添加了JSON.stringify。它似乎解析字符串,但每當我嘗試安慰。將結果記錄在控制檯返回的fetchImg中。 'detailedObject = storage.data.children; ^ TypeError:無法讀取未定義的屬性'children' 看來我無法將console.log從對象中刪除.... – lycrake
所以我找到了問題,將在問題中更新。尚未找到解決方案,但 – lycrake