Надеюсь, ты хорош
У меня есть проект, где я хочу отсканировать JSON из reddit.com/r/pics. Потяните случайное изображение и покажите его на веб-странице.
Reddits json на https://www.reddit.com/r/pics/.json?jsonp=1 вытаскивает некоторые символы в начале, прежде чем JSON начнет "/**/1 (" который отбрасывает парсер Javascript ".
Я могу regex редактировать некоторые символы из (см. Код), но в конечном итоге это не удается
SyntaxError: Неожиданная строка в JSON в позиции 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;
Я нашел проблему, Reddits JSON завернут в
/**/1 (
и в конце JSON есть закрывающая скобка, которую я пропустил
)
Если я удалю все из них, то он будет разбираться без стягивания. Мне нужно выяснить, как удалить стартовые 5 символов (которые будут увеличиваться в зависимости от количества номеров страниц) и окончательного 1 символа динамически...
Если я все время повторяю, все слэши и скобки удаляются по всему запросу...
После того, как.json был загружен fs, я сразу же использую срез для удаления первых 6 символов и последнего символа. У меня есть переменная pageReducer, которая уменьшает количество символов из JSON в зависимости от того, какое случайное JSON мое приложение тянет
sliceObject = object.slice(6 + pageReducer, -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;
}
Ошибка здесь: newObject = JSON.parse(object);
Сначала выполните JSON.stringify, а затем вы сможете использовать JSON.parse и продолжить свой код.
Я думаю, причина в том, что параметр "object" по-прежнему остается просто строкой javascript после удаления недопустимых символов, но он еще не является допустимым объектом редактирования JSON. JSON.stringify преобразует его в действительную строку JSON. Затем JSON.parse сможет проанализировать действительную строку JSON.
detailedObject = storage.data.children; ^ TypeError: Cannot read property 'children' of undefined
Похоже, я не могу console.log также вывести объект ....