在使用 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解析

音视频开发之旅(62) -Lottie 源码分析之json解析

音视频开发之旅(62) -Lottie 源码分析之json解析