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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:46:24