如何批量转义对象内双引号?解决JSON解析HTML标签报错问题
嘿,这个问题我太懂了!手动转义一堆双引号简直是体力活,给你几个省心的解决方案:
方案1:直接用JS对象导出(最推荐)
既然你是在JS模块里用,完全没必要把HTML塞进JSON字符串再解析——直接定义一个JS对象就行,这样HTML里的双引号根本不需要转义,代码可读性还更高:
export const HTMLTags = { h1s: { greating1: '<h1 id="ms1" class="ms">ABC</h1>', greating2: '<h1 id="ms2" class="ms">XYZ</h1>', // ...其他标签 greatingx: '<h1 id="msX" class="ms">QWE</h1>' } };
用的时候直接访问HTMLTags.h1s.greating1就好,省掉了JSON.parse的步骤,也彻底规避了转义问题。
方案2:用工具/脚本自动转义双引号
如果因为某些原因必须用JSON字符串格式,别手动转,用工具批量处理:
在线工具
找个靠谱的JSON转义工具,把你原始的HTML标签内容贴进去,一键就能把所有内部双引号转成\",直接复制回来用就行。
本地脚本(Node.js)
写个10行以内的小脚本自动处理:
// 把你原始的JSON字符串放这里 const rawStr = `{ "h1s": { "greating1": "<h1 id="ms1" class="ms">ABC</h1>", "greating2": "<h1 id="ms2" class="ms">XYZ</h1>", "greatingx": "<h1 id="msX" class="ms">QWE</h1>" } }`; // 正则匹配HTML属性里的双引号并转义(避开JSON结构本身的双引号) const escapedStr = rawStr.replace(/(?<=id=|class=)"/g, '\\"'); console.log(escapedStr);
运行这个脚本,输出的就是已经转义好的JSON字符串,直接替换你的HTMLTags就行。
方案3:改用单引号包裹HTML属性
HTML里属性用单引号也是完全合法的,把HTML里的双引号换成单引号,这样JSON字符串里的双引号就不会冲突了:
export const HTMLTags = `{ "h1s": { "greating1": "<h1 id='ms1' class='ms'>ABC</h1>", "greating2": "<h1 id='ms2' class='ms'>XYZ</h1>", "greatingx": "<h1 id='msX' class='ms'>QWE</h1>" } }`;
这样JSON.parse就能正常解析,不用转义任何引号。
为啥你原来的代码会报错?
简单说:JSON要求字符串必须用双引号包裹,而你HTML属性里的双引号没转义,比如"greating1": "<h1 id="ms1"..."这里,JSON解析器看到id="后面的双引号,会误以为这个JSON字符串已经结束了,后面的ms1就变成了无效语法,所以才会报Unexpected token x in JSON错误。
总结一下,方案1是最优解,既简单又不用折腾转义的事,强烈推荐!
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

