对象转为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)))
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
由于各种不确定性,通过正则的方式去掉双引号出错的概率太高了,所以不建议这样做,@mycn 。例如
{"attribute-list": ['name', 'size']}
。属性是否带有双引号并不影响解析,只是长度问题而已,解决长度问题可以考虑压缩,去双引号才能减少几个字长。
实在想做也是自己重新实现这个方法而不是对字符串做修改。