前端mock静态数据系统开发:非正规json转换为正常json函数

2019年3月18日08:02:48 发表评论 350 views
做了一个前端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
		}
	};

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: