运行EJS代码时JSON.parse报Unexpected end of JSON input错误如何解决?
错误原因
你猜测的箭头函数问题并不成立,报错信息明确指向JSON.parse执行失败:Unexpected end of JSON input,意思是待解析的JSON输入不完整,本质是渲染EJS模板时传入的documents变量不符合要求,常见触发场景如下:
- 后端渲染模板时,传给EJS的
documents是空值、undefined、null,本身就不是合法JSON字符串 - 后端返回的
documents本身就是已经解析完成的JS对象/数组,多执行一步JSON.parse反而触发报错 - 后端序列化JSON逻辑出错,输出的JSON格式残缺,比如少了闭合符号、特殊字符未转义等
修复步骤
第一步:先排查传入的documents实际值
先在模板中添加调试代码,打印传入的documents实际内容:
<% console.log('传入的documents值:', documents) %>
重启服务后查看终端输出内容,即可快速定位问题。
第二步:对应场景修复
- 如果
documents本身就是已经解析好的数组/对象:直接删除JSON.parse即可,代码修改为:
<% documents.forEach(document => { %> <a class="list-group-item list-group-item-action" id="<%= document.Key %>" data-bs-toggle="tab" href="#list-<%= document.Key %>" role="tab" aria-controls="list-<%= document.Key %>" style="min-width: 200px;"><%= document.Key %></a> <% }) %>
如果
documents确实是JSON字符串,但为空/格式残缺:检查后端逻辑,确保从数据库/第三方接口拿到数据后正确序列化,保证传给EJS的是合法JSON字符串,比如Node.js后端要先校验JSON.stringify的输出结果无异常再传入模板。如果无法保证
documents的取值稳定性,可以增加容错判断避免页面崩溃:
<% let docList = [] %> <% try { docList = typeof documents === 'string' ? JSON.parse(documents) : documents || [] } catch(e) { console.error('解析documents失败:', e) } %> <% docList.forEach(document => { %> <a class="list-group-item list-group-item-action" id="<%= document.Key %>" data-bs-toggle="tab" href="#list-<%= document.Key %>" role="tab" aria-controls="list-<%= document.Key %>" style="min-width: 200px;"><%= document.Key %></a> <% }) %>
内容的提问来源于stack exchange,提问作者fit
相关产品推荐
相关产品推荐

