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

JavaScript格式化含双引号的JSON时出现解析错误求解决方案

问题分析

你遇到的核心问题是:Golang模板往<pre id="jsonText">里填充JSON时,没正确转义字符串值里的双引号(比如description字段里的"hardcore"),导致前端拿到的是不合法的JSON结构,执行JSON.parse时直接抛出语法错误。之前尝试的正则全局替换要么把JSON本身的结构引号也转义了,要么没命中真正需要转义的位置,所以无效。

解决方案

方案一:后端Golang模板正确输出JSON(优先推荐)

这是根治问题的办法,利用Golang模板内置的json函数输出JSON,它会自动处理所有需要转义的字符(双引号、换行、特殊字符等),确保输出的是标准合法的JSON字符串。

模板代码修改示例:

如果你的模板原本是直接输出JSON数据:

<pre id="jsonText">{{.JsonData}}</pre>

改成用json函数输出:

<pre id="jsonText">{{json .JsonData}}</pre>

这里的.JsonData如果是Go的结构体、map等可序列化对象,json函数会直接把它转成标准JSON字符串;如果.JsonData已经是字符串类型,先把它解析成Go对象再用json函数,或者改用JS函数(也能处理HTML文本中的转义):

<pre id="jsonText">{{JS .JsonString}}</pre>

方案二:前端临时兼容修复(不推荐长期用)

如果后端暂时没法改,前端可以尝试针对性修复文本,但这种方法有局限性,复杂JSON可能失效。

思路是:只转义字段值内部的未转义双引号,避开JSON结构本身的引号(比如键名的引号、结构分隔的引号)。修改后的JS代码:

var pList = document.querySelectorAll("#jsonText");
[...pList].forEach(p => {
  let rawText = p.textContent;
  // 仅匹配不在结构引号内的未转义双引号,添加转义符
  let fixedText = rawText.replace(/(?<!\\)"(?!\s*:|\s*})/g, '\\"');
  try {
    let parsedData = JSON.parse(fixedText);
    p.textContent = JSON.stringify(parsedData, null, 2);
  } catch (err) {
    console.error("JSON修复失败:", err);
    // 解析失败时保留原文本,避免页面空白
    p.textContent = rawText;
  }
});

注意:这个正则只适配简单场景,要是JSON有嵌套对象、特殊转义字符等复杂情况,大概率还是会出问题,所以尽量优先改后端。

内容的提问来源于stack exchange,提问作者Seyit Gokce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:05:26