Post API返回类对象数组字符串解析失败,如何转为可用JS对象?
解决API返回JSON解析失败问题(含奇怪字符导致SyntaxError)
问题背景
调用Post API时,返回内容在Postman中显示为标准JSON结构,但使用response.json()或JSON.parse()时抛出错误:SyntaxError: Expected property name or '}' in JSON at position 2,目前只能通过response.text()获取字符串形式的响应,需要解析后提取每个对象的code和number字段进行校验。
Postman中显示的响应结构如下:
{ "items": [ { "number": 119777777, "code": "S", "name": "name Full award ", "year": 2021, "updatedate": "04-JAN-2023" }, { "number": 119777777, "code": "H", "name": "Hospital funding.", "year": 2021, "updatedate": "04-JAN-2023" } ] }
解决方案
问题根源是响应字符串包含不可见的无效字符(如UTF-8 BOM头、非打印控制字符等),Postman会自动过滤这些字符,但JS解析器无法识别。需先清理字符串再解析:
修改后的代码
function GetFunding() { fetch('my url', { method: "POST" }) .then(function (response) { return response.text(); // 先获取原始文本 }) .then(function (bodyText) { // 清理无效字符:去除BOM头、控制字符,替换非标准空格 const cleanedText = bodyText .replace(/^\uFEFF/, '') // 移除UTF-8 BOM头 .replace(/[\x00-\x1F\x7F]/g, '') // 移除控制字符 .replace(/\s+/g, ' '); // 统一替换所有空白字符为标准空格 try { const data = JSON.parse(cleanedText); // 提取并校验code和number字段 data.items.forEach(item => { console.log(`number: ${item.number}, code: ${item.code}`); // 这里添加你的校验逻辑 }); } catch (err) { console.error('清理后仍无法解析JSON:', err); console.log('清理后的文本:', cleanedText); } }) .catch(function (err) { console.error('请求失败:', err); }); };
关键处理说明
- 直接用
response.text()获取原始响应,跳过自动解析步骤 - 清理逻辑覆盖常见无效字符:
^\uFEFF:移除UTF-8 BOM头(常见于部分后端返回的JSON)[\x00-\x1F\x7F]:移除ASCII控制字符(如换行、制表符以外的不可见字符)- 统一空白字符避免非标准空格导致的解析问题
- 用
try-catch包裹解析过程,方便排查剩余问题
内容的提问来源于stack exchange,提问作者General_McC
相关产品推荐
相关产品推荐

