Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1

本文解决了一个使用axios进行前后台对接时出现的Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1的问题。当后端返回的数据不是有效的JSON字符串时,可以使用JSON.stringify方法将对象转换为字符串来避免此错误。

使用axios进行前后台对接传值时,返回json数据,报Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1 错误,下面先来看下弹窗获取的值:


呀!报错了 =_=  


json返回的不是json字符串

那么我们就要用下面这个方法:

JSON.stringify 方法 从一个对象解析出字符串





这样应该就不报错了=。=



### JSON解析中SyntaxError错误的解决方案 在JavaScript中,`JSON.parse()` 方法用于将一个JSON字符串转换为JavaScript对象。然而,当输入的字符串不符合JSON格式时,会抛出 `SyntaxError` 错误。例如,`Uncaught SyntaxError: Unexpected token o in JSON at position 1` 或 `Uncaught SyntaxError: Unexpected token u in JSON at position 0` 都表明解析的字符串并非有效的JSON[^1]。 以下是解决该问题的具体方法: #### 1. 确保输入是合法的JSON字符串 合法的JSON字符串必须遵循JSON语法规范。例如,键和值必须用双引号包裹,而不是单引号。以下是一个合法的JSON字符串示例: ```json { "key": "value", "number": 123, "boolean": true, "nullValue": null } ``` 如果输入的字符串不是合法的JSON格式,`JSON.parse()` 将抛出错误。因此,在解析前应确保字符串符合JSON格式[^2]。 #### 2. 使用`try...catch`捕获错误 为了防止程序因 `SyntaxError` 而崩溃,可以使用 `try...catch` 块来捕获并处理错误。例如: ```javascript const parseJSON = (str) => { try { return JSON.parse(str); } catch (e) { console.error('Invalid JSON string:', e.message); return null; // 返回null或其他默认值 } }; const jsonString = '{"key":"value"}'; const result = parseJSON(jsonString); console.log(result); // 输出 { key: "value" } ``` #### 3. 检查数据来源 有时,错误可能源于数据来源。例如,服务器返回的数据可能不是JSON字符串,而是已经被解析为对象。在这种情况下,直接调用 `JSON.parse()` 会导致错误。可以通过检查数据类型来避免此类问题: ```javascript if (typeof data === 'string') { const parsedData = JSON.parse(data); console.log(parsedData); } else { console.warn('Data is not a string, cannot parse as JSON.'); } ``` #### 4. 替代方案:动态执行字符串 如果确定输入字符串是安全的(例如来自可信源),可以使用动态执行的方法代替 `JSON.parse()`。例如: ```javascript const jsonEval = (fn) => { const Fun = Function; // 避免前端编译工具报错 return new Fun('return ' + fn)(); }; const str = '{"key":"value"}'; const result = jsonEval(str); console.log(result); // 输出 { key: "value" } ``` 注意:此方法存在安全隐患,仅适用于完全受信任的输入[^1]。 #### 5. 示例代码:完整解决方案 以下是一个完整的解决方案,结合了上述所有方法: ```javascript const safeParseJSON = (str) => { if (typeof str !== 'string') { console.warn('Input is not a string, cannot parse as JSON.'); return null; } try { return JSON.parse(str); } catch (e) { console.error('Invalid JSON string:', e.message); return null; } }; const jsonString = '{"key":"value"}'; const invalidString = '{key:value}'; // 错误的JSON格式 console.log(safeParseJSON(jsonString)); // 输出 { key: "value" } console.log(safeParseJSON(invalidString)); // 输出 null,并打印错误信息 ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值