在使用 node-fetch 解析为 JSON 之前替换原始数据中的字符
Posted
技术标签:
【中文标题】在使用 node-fetch 解析为 JSON 之前替换原始数据中的字符【英文标题】:Replace character in raw data before parsing to JSON using node-fetch 【发布时间】:2021-01-17 06:53:54 【问题描述】:我正在尝试从网站获取原始数据并将其转换为 JSON,但问题是数据使用单引号而不是双引号,这会出错
UnhandledPromiseRejectionWarning: FetchError: invalid json response body at (WEBSITE_LINK) reason: Unexpected token ' in JSON at position 1
如果我在浏览器中打开页面,数据如下所示:
'test': True, 'number': 0
如何在使用以下代码将单引号解析为 JSON 之前将其转换为双引号?
let url = `WEBSITE_LINK`;
let settings = method: "Get" ;
fetch(url, settings)
.then(res => res.json())
.then((json) =>
console.log(json.test)
console.log(json.number)
);
【问题讨论】:
True 也应该替换为 true 它无效的 json 的原因是因为单词 - True 不是有效的 javascript。请后端提供商为您提供真实的小写字母。 【参考方案1】:您可以使用 js String replace 方法广告手动解析返回的字符串。
let url = `WEBSITE_LINK`;
let settings = method: "Get" ;
fetch(url, settings)
.then(res => res.text())
.then((text) =>
const json = JSON.parse(text.replace(/'/g, '"'));
console.log(json.test);
console.log(json.number);
);
【讨论】:
非常感谢您的回复!不幸的是,当我尝试执行该代码时收到错误消息:(node:18872) UnhandledPromiseRejectionWarning: TypeError: res.text(...).replace is not a function
- 我尝试将其更改为 res.text().toString.replace 但这也不起作用
啊,是的,res.text 返回了一个承诺。您可以在另一个中进行解析,然后调用【参考方案2】:
使用 String 构造函数将响应转换为字符串,然后应用替换方法。
let url = `WEBSITE_LINK`;
let settings =
method: "Get"
;
fetch(url, settings)
.then(res =>
const text = String(res.text()).replace(/'/g, '"');
return JSON.parse(text);
)
.then((json) =>
console.log(json.test)
console.log(json.number)
);
【讨论】:
如何将“True”也更改为“true”? 你可以使用“toLowerCase()”方法。以上是关于在使用 node-fetch 解析为 JSON 之前替换原始数据中的字符的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS Node-Fetch Call Stripe 中的 JSON 错误
Node-fetch 返回 Promise <pending> 而不是所需的数据 [重复]
可以在 Typescript 库中的 package.json 中将 @types 库作为正常依赖项吗?
音视频开发之旅(62) -Lottie 源码分析之json解析