汪微的博客
zane,做一个有思维的开发者

汪微的博客

非JSON格式字符串转换为正规JSON字符串

2017年09月12日212 browse

前段时间做了一个前端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
		}
	};



以上函数仅供参考,希望对你有所帮助,若有更好的方案欢迎给我留言额。


博主 zane 发表于 2017-09-12 20:17:42,添加在了 正则 标签下

打赏

您的支持将鼓励我继续努力与分享。

扫码打赏,建议金额1-10元

提醒:打赏金额将直接进此方账号,无法退款,请您谨慎操作。

评论

正在加载验证码......

提交