
本文讲解如何安全、准确地解析数据库返回的 json 字符串(如 [“a”, “b”, “c”]),避免正则误分割内部逗号,直接利用 json.parse() 转为数组后按项渲染为列表。
在实际开发中,后端常以 jsON 字符串形式返回结构化数据(例如:”[“Time Usage: 9.00am – 4.00pm”, “Rental of Commune Room 01 (7 Hours)”, “55\” Smart TV, 1x Clear Writing Glass, Marker Pen, HDMI Cable, Complimentary wifi, and Filtered Water”]”)。若错误地将其转为字符串再用正则(如按逗号分割)处理,极易因字段内含英文逗号、引号或转义字符而造成错误切分——正如问题中出现的“55″ Smart TV”被截断、“and Filtered Water”被孤立成独立行等现象。
根本原因在于:原始数据本质是合法 json 数组,而非普通文本。强行用 toString() + 正则替换不仅逻辑复杂、脆弱易错,还绕过了 javaScript 原生的健壮解析能力。
✅ 正确做法是:优先使用 JSON.parse() 将字符串安全还原为原生数组,再遍历渲染:
// 假设从 API 或数据库获取的是 JSON 字符串(常见于 AJAX 响应) const ajaxPlainResponse = '["Time Usage: 9.00am - 4.00pm", "Rental of Commune Room 01 (7 Hours)", "55\" Smart TV, 1x Clear Writing Glass, Marker Pen, HDMI Cable, Complimentary WiFi, and Filtered Water"]'; // ✅ 安全解析:自动处理转义引号、嵌套逗号等 const description = JSON.parse(ajaxPlainResponse); // 渲染为无序列表(纯 JS 方式) const list = document.getElementById('list'); description.forEach(item => { const li = document.createElement('li'); li.textContent = item; // 自动转义,防止 xss list.appendChild(li); });
⚠️ 注意事项:
- 务必校验输入:JSON.parse() 在遇到非法 JSON 时会抛出异常,建议包裹 try…catch:
let description = []; try { description = JSON.parse(ajaxPlainResponse); } catch (e) { console.error('Invalid JSON response:', e); description = []; // 降级为空数组 } - 避免手动拼接 html:如示例中使用 textContent 而非 innerHTML,可天然防御 XSS;若需富文本,请使用 DOMPurify 等库净化。
- jquery 简化版(可选):若项目已引入 jQuery,AJAX 响应可直接设 dataType: ‘json’,省去手动解析:
$.ajax({ url: '/api/items', dataType: 'json', success(response) { $('#list').empty().append( response.map(text => `- ${text}
`).join('') ); } });
总结:面对带双引号的结构化文本,不要用正则“硬切”,而要用语义化解析。JSON.parse() 是专为这类场景设计的标准方案——它尊重引号边界、正确处理转义、兼容所有合法 JSON 结构,代码更简、逻辑更稳、维护性更高。