在Node中parsingRedis的JSON。 JavaScriptparsing器不喜欢评论

希望你很好

我有一个项目,我想扫描reddit.com/r/pics的JSON。 拉一个随机图像,并显示在网页上。

在https://www.reddit.com/r/pics/.json?jsonp=1中对json进行redis命令,在JSON开始“/ ** / 1('这是抛出Javascriptparsing器”

我可以正则expression式编辑一些字符(见代码),但最终失败

SyntaxError:位置1的JSON中意外的string

如果我删除这些,本地保存该文件,那么它似乎工作正常,如预期。

解决这个问题的最好方法是什么?

我完全错过了什么吗?

提前致谢!

这是我的代码,它在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结尾处也有一个右括号

如果我删除所有这些,然后parsing没有stringify。 我需要弄清楚的是如何删除开始的5个字符(这将增加取决于页面的数量)和最后1个字符dynamic…

如果我把所有的正则expression式全部删除,所有的斜杠和括号都被删除整个查询…

解决了

一旦.json被fs下载,我立即使用slice来删除前6个字符和最后一个字符。 我有一个可变的pageReducer,从JSON中减less更多的字符,这取决于我的应用程序拉哪个随机的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并继续你的代码。

我认为原因是因为“对象”参数在删除无效字符后仍然只是一个javascriptstring,但它还不是一个有效的JSON可编辑对象。 JSON.stringify将其转换为有效的JSONstring。 JSON.parse然后将能够parsing有效的JSONstring。