TSV解析时JSON键出现转义双引号问题求助
问题:解析TSV生成JSON时键带转义双引号,如何改为单引号?
我在解析TSV文件时执行如下字典赋值操作:
headers[col] = JSON.stringify(value);
发现使用JSON.stringify、toString()以及string()方法后,生成的JSON键均带有转义双引号,示例输出如下:
{ '"Beruf"': 'Vorarbeiter', '"Anrede"': 'Herr', '"Nachname"': 'Emil', '"Vorname"': 'Gurke', '"Eintritt"': 34407, '"Geb.Tag"': 24004, '"STR"': 'Max-Planck-Str. 1', '"Ort"': 'Marzahn', '"Postleitzahl"': 2232145, '"Mobil"': '+4942314151512351351513', '"Mail"': 'test@test.de', '"Personalnummer"': 1067 }
请问如何让JSON键仅带单引号,我的赋值操作存在什么错误?
解决方法
赋值操作的错误点
- 问题不在赋值语句本身,而是你用作键的
col变量已经被HTML转义,包含"(转义后的双引号),导致最终键名带转义字符。 JSON.stringify是用来序列化值的,你这里对value的处理没问题,但键的原始数据就有问题。
实现键带单引号的方案
1. 先清理键的转义字符
首先把col中的"替换为空,得到原始键名:
const cleanedKey = col.replace(/"/g, '');
2. 生成单引号格式的JSON(非标准)
标准JSON要求键用双引号,若要生成单引号格式,可通过两种方式实现:
- 手动拼接字符串:适用于逐个处理键值对的场景
// 处理单个键值对 const keyValue = `'${cleanedKey}': ${typeof value === 'string' ? `'${value}'` : value}`; // 若要生成完整对象,需将所有键值对用逗号分隔后包裹在{}中 const finalObjStr = `{ ${allKeyValuePairs.join(', ')} }`; - 转换后替换引号:先生成标准JSON,再替换双引号为单引号
// 先构建清理后的对象 const cleanedData = {}; // 假设headers是原始字典,遍历处理所有键 Object.entries(headers).forEach(([key, val]) => { const fixedKey = key.replace(/"/g, ''); // 注意:如果val是之前用JSON.stringify转的字符串,需要先解析回原始值 cleanedData[fixedKey] = typeof val === 'string' ? JSON.parse(val) : val; }); // 生成标准JSON后替换引号 const singleQuoteJson = JSON.stringify(cleanedData).replace(/"/g, "'");
重要提示
带单引号的JSON不属于标准JSON规范,仅适合特定自定义场景使用。如果是用于系统间数据交互,建议保留标准双引号格式,只需清理键的转义字符即可。
内容的提问来源于stack exchange,提问作者apingaway
相关产品推荐
相关产品推荐

