
本文讲解如何将形如 {"A", "B", "C"} 的类 JSON 字符串安全、简洁地转换为 JavaScript 数组,重点介绍正则替换 + JSON.parse 的实用方案,并提醒常见陷阱与替代方法。
本文讲解如何将形如 `{"a", "b", "c"}` 的类 json 字符串安全、简洁地转换为 javascript 数组,重点介绍正则替换 + `json.parse` 的实用方案,并提醒常见陷阱与替代方法。
在实际开发中,我们偶尔会遇到非标准但结构清晰的字符串数据,例如:
{"Adana, Türkiye","Mersin, Akdeniz/Mersin, Türkiye","Yozgat, Yozgat Merkez/Yozgat, Türkiye"}
它外观类似 JSON,但使用花括号 {} 包裹、元素间无键名,因此不能直接用 JSON.parse() 解析——会抛出 SyntaxError。
✅ 推荐解决方案:正则预处理 + 安全解析
核心思路是将非法格式“修复”为合法 JSON 数组格式(即用 [...] 替代 {...}),再调用 JSON.parse():
const rawData = '{"Adana, Türkiye","Mersin, Akdeniz/Mersin, Türkiye","Yozgat, Yozgat Merkez/Yozgat, Türkiye"}';
// 步骤1:移除首尾花括号,并用方括号包裹
const jsonArrayStr = `[${rawData.replace(/[{}]/g, '')}]`;
// 步骤2:解析为真实数组
const result = JSON.parse(jsonArrayStr);
console.log(result);
// 输出:
// [
// "Adana, Türkiye",
// "Mersin, Akdeniz/Mersin, Türkiye",
// "Yozgat, Yozgat Merkez/Yozgat, Türkiye"
// ]
⚠️ 注意事项:
- 该方法仅适用于花括号内无嵌套 {} 或 } 字符的简单场景(如示例中的纯字符串列表)。若原始字符串含转义引号、内部花括号或复杂结构,需改用更健壮的解析器(如自定义 tokenizer 或正则分词)。
- replace(/[{}]/g, '') 会全局移除所有 { 和 },因此确保输入中不存在干扰性花括号;更稳妥写法可限定只替换首尾:
const jsonArrayStr = `[${rawData.slice(1, -1)}]`; // 假设格式严格为 {xxx} - 所有字符串必须被双引号包裹(如 "Adana, Türkiye"),单引号或无引号会导致 JSON.parse 失败。若源数据引号不规范,需先统一标准化。
? 扩展建议:
如需长期处理此类格式,可封装为可复用函数:
function parseBracedString(str) {
if (!str || typeof str !== 'string') throw new Error('Input must be a string');
const trimmed = str.trim();
if (!trimmed.startsWith('{') || !trimmed.endsWith('}'))
throw new Error('String must start with "{" and end with "}"');
try {
return JSON.parse(`[${trimmed.slice(1, -1)}]`);
} catch (e) {
throw new Error(`Failed to parse braced string: ${e.message}`);
}
}
总结:对于结构明确、无嵌套的花括号字符串,通过正则或字符串截取将其“嫁接”为合法 JSON 数组格式,是最轻量、高效且符合 Web 标准的转换方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











