Разбор Reddits JSON в узле. Парсер Javascript не любит комментарии

1

Надеюсь, ты хорош

У меня есть проект, где я хочу отсканировать 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);
Теги:
express

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;

}

Ошибка здесь: newObject = JSON.parse(object);

Сначала выполните JSON.stringify, а затем вы сможете использовать JSON.parse и продолжить свой код.

Я думаю, причина в том, что параметр "object" по-прежнему остается просто строкой javascript после удаления недопустимых символов, но он еще не является допустимым объектом редактирования JSON. JSON.stringify преобразует его в действительную строку JSON. Затем JSON.parse сможет проанализировать действительную строку JSON.

  • 0
    Спасибо за это, я проверю это сегодня и сообщу!
  • 0
    Привет, я попробовал. Я добавил в JSON.stringify до JSON.parse. Кажется, что он анализирует строку, но всякий раз, когда я пытаюсь сохранить console.log, результаты в fetchImg возвращаются консолью. detailedObject = storage.data.children; ^ TypeError: Cannot read property 'children' of undefined Похоже, я не могу console.log также вывести объект ....
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню