对象转为JSON格式后,属性带着双引号,如何把属性的双引号处理掉
const obj = {
name: 'joe',
age: 18
}
const str1 = JSON.stringify(obj).replace(/":/g, ':').replace(/,"/g, ',').replace(/{"/g, '{')
const str2 = '{' + JSON.stringify(obj).substring(1).split(',').map(i => i.split(':')).map(([k, v]) => ([k.substring(1, k.length - 1), v]).join(':')).join(',')
function conObj(str: string) {
try {
return JSON.parse(str)
} catch {
return eval(`(${str})`)
}
}
console.log(str1, str2)
console.log(conObj(str1), conObj(JSON.stringify(obj)))
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2k 阅读
9 回答1.7k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
5 回答894 阅读
由于各种不确定性,通过正则的方式去掉双引号出错的概率太高了,所以不建议这样做,@mycn 。例如
{"attribute-list": ['name', 'size']}
。属性是否带有双引号并不影响解析,只是长度问题而已,解决长度问题可以考虑压缩,去双引号才能减少几个字长。
实在想做也是自己重新实现这个方法而不是对字符串做修改。