You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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) %>

重启服务后查看终端输出内容,即可快速定位问题。

第二步:对应场景修复

  1. 如果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>
<% }) %>
  1. 如果documents确实是JSON字符串,但为空/格式残缺:检查后端逻辑,确保从数据库/第三方接口拿到数据后正确序列化,保证传给EJS的是合法JSON字符串,比如Node.js后端要先校验JSON.stringify的输出结果无异常再传入模板。

  2. 如果无法保证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:15:03