JavaScript处理JSON时替换单反斜杠为双反斜杠后双引号丢失问题
问题原因
你当前的写法破坏了JSON序列化后的固定转义结构:
JSON.stringify输出的字符串中,\\"是JSON用来标识字符串内部双引号的标准转义格式,你的正则直接将\\"替换为\\,相当于直接删除了后面的双引号,自然会导致原内容里的双引号丢失。- 不要直接修改序列化后的JSON字符串,很容易打乱JSON本身的转义规则,引发解析异常。
解决方案
优先直接操作原始JS对象的字符串字段,单独做反斜杠替换,完全不影响JSON的转义结构:
var json = { "DateToday": "2021-08-11", "MetaData": [ { "id": "222", "nameUsed": " \"data\" somemorefillerdata» - somemorefillerdata «somemorefillerdata»", "type": "movies" } ] } // 遍历目标字段替换单个反斜杠为双反斜杠 json.MetaData.forEach(item => { // 正则匹配所有字面反斜杠,替换为双反斜杠 item.nameUsed = item.nameUsed.replace(/\\/g, '\\\\') }) // 后续序列化、解析都不会丢失内容 let newJson = JSON.stringify(json) let parseResult = JSON.parse(newJson) console.log(parseResult)
运行后nameUsed字段的双引号会完整保留,同时反斜杠会替换为双反斜杠。如果需要处理对象内所有字符串字段,补充递归遍历逻辑处理所有字符串类型的属性即可。
内容的提问来源于stack exchange,提问作者TWF
相关产品推荐
相关产品推荐

