Javascript 从url获取json的节点

Javascript 从url获取json的节点,javascript,node.js,json,fetch-api,Javascript,Node.js,Json,Fetch Api,我试图在Nodejs中获取并解析下面的返回的JSON。问题似乎在于节点代码试图解析包含换行符的JSON字符串,但我不确定如何避免这种情况,也不知道为什么fetch在chrome devtools中工作。我猜问题在于我对https请求的认识过于简单,因此如果有人能解释出哪里出了问题,我将不胜感激 const url = "https://beta.charitycommission.gov.uk/umbraco/api/charityApi/getSearchResults?searchText=

我试图在Nodejs中获取并解析下面的返回的JSON。问题似乎在于节点代码试图解析包含换行符的JSON字符串,但我不确定如何避免这种情况,也不知道为什么fetch在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))
我在node中尝试了以下操作,但均无效

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解析json数据并返回一个对象。使用await将数据返回到变量json中。

尝试使用默认获取:

json解析json数据并返回一个对象。使用wait将数据返回到变量json中。

问题是json文件以UTF-8 BOM格式保存

这是什么意思

文件以所谓的字节顺序标记字符开始

“不可见”的宽度为零,但仍然存在,JSON解释器无法解析它

如何解决

保存不带BOM的JSON数据,或 使用res.text,然后使用JSON.parsetext.slice1删除前导字符:

fetch(url)
.then(res => res.text())
.then(text => JSON.parse(text.slice(1)))
.then(json => console.log(json.pageItems))
为什么它在Chrome中工作

Chrome会自动从任何获取/下载的文件中删除BOM字符,以避免类似问题。

问题在于您的JSON文件是以UTF-8 BOM格式保存的

这是什么意思

文件以所谓的字节顺序标记字符开始

“不可见”的宽度为零,但仍然存在,JSON解释器无法解析它

如何解决

保存不带BOM的JSON数据,或 使用res.text,然后使用JSON.parsetext.slice1删除前导字符:

fetch(url)
.then(res => res.text())
.then(text => JSON.parse(text.slice(1)))
.then(json => console.log(json.pageItems))
为什么它在Chrome中工作


Chrome会自动从任何获取/下载的文件中删除BOM字符,以避免类似问题。

数据仍然无法解析。浏览器能够解决的数据似乎有问题,但软件包无法解决。数据仍然无法解析。浏览器能够解决的数据似乎存在问题,但软件包无法解决。