【问题标题】:Unexpected token ? in JSON at position 0意外的标记 ?在 JSON 中的位置 0
【发布时间】:2020-05-14 10:20:01
【问题描述】:

我在 node.js 中向一个返回我试图解析的对象的 url 发出 get 请求。但是我收到了意外的令牌错误。我玩过不同的编码以及将响应正文转换为字符串,然后删除这些标记,但没有任何效果。将编码设置为 null 也没有解决我的问题。

下面是我得到的响应正文:

��[{"unit":"EN15","BOX":"150027","CD":"12 - Natural Gas Leak","Levl":"1","StrName":"1000 N Madison Ave","IncNo":"2020102317","Address":"1036 N Madison Ave","CrossSt":"W 5TH ST/NECHES ST"},{"unit":"EN23","BOX":"230004","CD":"44 - Welfare Check","Levl":"1","StrName":"S Lancaster Rd / E Overton Rd","IncNo":"2020102314","Address":"S Lancaster Rd / E Overton Rd","CrossSt":""}]

这些是我请求的标题

headers: {'Content-Type': 'text/plain; charset=utf-8'}

这是我解析响应正文的方式

const data = JSON.parse(response.body)

任何帮助将不胜感激!

更新:必须对响应主体执行此操作才能使其正常工作

const data = response.body.replace(/^\uFFFD/, '').replace(/^\uFFFD/, '').replace(/\0/g, '')

【问题讨论】:

标签: node.js json


【解决方案1】:

您可能正在获取 UTF-8 字符串的字节顺序标记 (BOM)。

最简单的解决方法是在解析之前将其删除。

const data = JSON.parse(response.body.toString('utf8').replace(/^\uFFFD/, ''));

更新:您的前 2 个字符是 Unicode 替换字符。要删除它,请使用 \uFFD 字符。

【讨论】:

  • 是的,我试过了,结果还是一样
  • 这样解决了问题,但现在我收到一个错误,即存在空值 - JSON 中位置 1","at JSON.parse 中的意外令牌 \u0000。我已经使用 JSON.parse(JSON.stringify(data)) 解决了这个问题,但是我无法访问响应的各个元素
  • 好的,这对我有用 - const data = response.body.replace(/^\uFFFD/, '').replace(/^\uFFFD/, '').replace(/\0 /G, '')。感谢您的帮助@JeremyRock
猜你喜欢
  • 2018-03-02
  • 1970-01-01
  • 2020-10-31
  • 2021-10-22
  • 2021-05-21
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多