我正在尝试在Nodejs中获取并解析下面返回的JSON。看来问题在于节点代码正在尝试解析包含换行符的JSON字符串,但是我不确定如何避免这种情况,以及为什么提取在chrome devtools中起作用。我猜问题出在我对https请求的简单了解,所以如果有人可以解释出什么问题了,我将不胜感激。
const url = "https://beta.charitycommission.gov.uk/umbraco/api/charityApi/getSearchResults?searchText=&pageNumber=1&contextId=1126&onlyShow=&&&&&&&"
我可以在域上打开的chrome devtools中成功运行此程序。另外,JSON似乎会自动解析为一个对象,这是我没有想到的。
fetch(url).then(res => res.json()).then(json => console.log(json.pageItems))
我已经在节点中尝试了以下方法,但是没有任何效果。
const fetch = require("node-fetch");
await fetch(url).then(res => res.json()); // Unexpected token in JSON at position 0
const rp = require('request-promise-native');
const json = await rp({uri: url}) // returns JSON string with newline characters
JSON.parse(json) // Unexpected token in JSON at position 0
问题是您的JSON文件以UTF-8 BOM格式保存。
这是什么意思?
您的文件以所谓的字节顺序标记字符U+FEFF
(零宽度不间断空格)开头。
这是不可见的(宽度为零),但仍然存在,并且JSON解释器无法解析它。
怎么解决?
使用res.text()
然后JSON.parse(text.slice(1))
删除主角:
fetch(url)
.then(res => res.text())
.then(text => JSON.parse(text.slice(1)))
.then(json => console.log(json.pageItems))
为什么它可以在Chrome中使用?
Chrome会自动从所有提取/下载的文件中删除BOM字符,以避免类似的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句