Unexpected token < in JSON at position 0 的错误解析

Unhandled Rejection (SyntaxError): Unexpected token < in JSON at position 0
当你发送一个HTTP请求,可能是用Fetch或者其他的Ajax库,可能会出现这个错误提示,或者相似的错误。
接下来我将解释这是由什么引起的,我们应该怎样解决这些问题

引起的原因

这些错误发生在当你向服务器发送请求,返回值不是JSON而用JSON的方法解析的时候,发生这种情况的代码可能是这样的。

fetch('/users').then(res => res.json())

JSON.parse

实际的请求没有问题,它得到了一个返回值,发生问题的关键在于res.json()。

用另一种方法JSON.parse来解析Json的, 代码可能是这样的

JSON.parse(`不是Json的字符串`);

JSON.parse()本质上是和res.json()一样的,所以它们发生错误的情况是相同的。

无效的JSON

JSON应该以有效的JSON值开始 —— 一个object, array, string, number, 或者是
false/true/null。以<开始的返回值会有Unexpected token <这样的提示。
<这个符号意味着返回值是HTML而不是JSON。
引起这个错误的根源是服务端返回的是HTML或者其他不是Json的字符串。
为什么会这样呢?
“Unexpected token o in JSON at position 1” 或者其他变量。
错误的提示一些差别会随着服务器返回的不同而不同

它所提示的符号或者位置可能不同,但是引起它的原因是相同的: 你的代码所有解析的Json不是真的有效的Json。
下面是一些我所看见的错误的提示:

Unexpected token < in JSON at position 1
Unexpected token p in JSON at position 0
Unexpected token d in JSON at position 0

解决方案

With fetch, you can use res.text() instead of res.json() to get the text string itself. Alter your code to read something like this, and check the console to see what’s causing the problem:
首先要做是先把返回值打印出来。如果用fetch,可以用res.text()代替res.json()来获得字符串。把你的代码转换成如下这样,并且通过打印出来的内容查看哪里出问题了。

fetch('/users')
  // .then(res => res.json()) // comment this out for now
  .then(res => res.text())          // convert to plain text
  .then(text => console.log(text))  // then log it out

注意像res.json()和res.text()这样的方法是异步的。所以不能直接把它们的返回值打印出来,这就是console.log必须在.then的括号里面的原因。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"SyntaxError: Unexpected token < in JSON at position 0"这个错误通常是由于尝试将非JSON格式的数据解析JSON对象而引起的。在这种情况下,解析器在遇到无效的JSON标记时会抛出此错误。常见的原因是尝试将包含HTML标签或其他非法字符的字符串解析JSON对象。 要解决这个问题,你可以使用try-catch语句来捕获异常,并在解析之前确保你的字符串是有效的JSON格式。你可以使用JSON.parse()方法将字符串解析JSON对象之前,先使用合适的方法来验证字符串是否是有效的JSON格式。 以下是一种判断字符串是否是有效的JSON格式的方法: ``` function isJson(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } ``` 你可以在调用JSON.parse()之前使用isJson()方法来验证字符串是否是有效的JSON格式。如果返回true,说明字符串是有效的JSON格式,可以进行解析;如果返回false,则说明字符串不是有效的JSON格式,需要进行相应的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unexpected token in JSON at position 0 的错误解析](https://blog.csdn.net/Kiruthika/article/details/123214054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JSON.parse解析字符串报错-SyntaxError: Unexpected token ‘ in JSON at position 报错 并捕获该异常操作](https://blog.csdn.net/weixin_42700654/article/details/117782146)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Unexpected token c in JSON at position 0 报错信息及解决](https://download.csdn.net/download/weixin_38667697/14887988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值