前端mock静态数据系统开发:非正规json转换为正常json函数
做了一个前端mock静态数据系统,有这样的一个速求:
把所有非正规的json转换为正常的json(最大容忍限度)
经过博主的敲打最后封装成如下的函数,在此做次记录,也给有需要的人提供一个参考意见:
测试字符串:
{
name:'zhang san',
}
{
‘name’:'zhang san',
}
{
‘name’:'zhs'a'ng san',
}
{
"name’:'zhs“a'ng san',
}
{
"na‘me’:'zhs“a'ng san',
age':25
}
{
"na‘me’:zhs“a'ng san,
age:'25
}
{
"na‘me’:'zhs“a"ng san',
age: '2'5
}
ToJson函数
// 不和规范的json 转换成符合规范的JSON
toJson(json) {
let copyJson = json;
if (!copyJson) return;
// 替换不正常的 { 号
copyJson = copyJson.replace(/{/g, '{')
// 替换不正常的 } 号
copyJson = copyJson.replace(/}/g, '}')
// 替换不正常的 : 号
copyJson = copyJson.replace(/:/g, ':')
// 去掉所有的空格
copyJson = copyJson.replace(/s/g, '')
// 替换所有的 引号
copyJson = copyJson.replace(/['‘“’”]/g, '"')
// 替换value值中的双引号
copyJson = copyJson.replace(/"(?=([ws-_d.*u4E00-u9FA5uf900-ufa2d]+?))/g, '’')
// 替换不正常的 , 号
copyJson = copyJson.replace(/[,]/g, ',')
// 替换 undefined 为字符串
copyJson = copyJson.replace(/["']?undefined["']?/g, '"undefined"')
// 替换所有}之前的,号
copyJson = copyJson.replace(/,}/g, '}')
try {
// 若正常直接返回
JSON.parse(copyJson);
return copyJson;
} catch (err) {
// 不正常开始替换
copyJson = copyJson.replace(/{"?([u4E00-u9FA5uf900-ufa2d'"dw_-]*?)"?:/g,($a,$b)=>{
return `{"${$b}":`;
})
copyJson = copyJson.replace(/,"?([u4E00-u9FA5uf900-ufa2d'"dw_-]*?)"?:/g,($a,$b)=>{
return `,"${$b}":`;
})
return copyJson
}
};
THE END