提取JSON对象标题实现自动补全时遇Unexpected token o错误求助
解决
$.parseJSON()触发"Uncaught SyntaxError: Unexpected token o"的问题 核心原因
这个错误说白了就是你多做了一步无用功——你手里已经是现成的JavaScript对象了,却还非要用$.parseJSON()去“解析”它。
$.parseJSON()的要求很明确:它只认JSON格式的字符串。如果你传进去的是已经解析好的对象,JS会先把这个对象转成字符串"[object Object]",然后去解析这个字符串的时候,第一个字符就是o,这不就直接触发语法错误了嘛。
常见场景&解决办法
场景1:用了自动解析的AJAX方法
比如你用$.getJSON()或者原生fetch的response.json()获取数据,这些方法本身就帮你把JSON字符串转成JS对象了,根本不需要再调用$.parseJSON():// 正确写法:直接用返回的对象 $.getJSON('你的数据接口.json', function(data) { // 遍历提取标题 data.forEach(item => { console.log(item.title); }); });场景2:手动构造数据搞混了字符串和对象
自己写测试数据的时候,一定要分清JSON字符串和JS对象的区别:// 错误:传对象给$.parseJSON() let wrongData = {title: "测试标题"}; $.parseJSON(wrongData); // 直接报错 // 正确:只有字符串才需要解析 let correctDataStr = '{"title": "测试标题"}'; let data = $.parseJSON(correctDataStr); console.log(data.title); // 正常输出场景3:不确定变量类型
拿不准手里的变量是字符串还是对象?先打印类型确认:console.log(typeof 你的变量名); // 如果输出是"object",直接用就行;如果是"string",再调用$.parseJSON()
针对你的需求(提取所有标题打印)
不管你是直接拿到解析好的对象,还是解析后的对象,都可以用这段代码来提取标题:
// 假设data是包含多个带title字段的对象数组 data.forEach(item => { if (item.title) { // 避免没有title字段的情况报错 console.log(item.title); } });
内容的提问来源于stack exchange,提问作者user5481714
相关产品推荐
相关产品推荐

