JSON.parse 转换字符串样式的数组

有时候后端返回的数据中有数组或对象的结构,却仍然以字符串的形式返回给前端;

let data = {
	records: [
		{
			"id": "1",
			"info": '[{"name":"张三","age":60},{"name":"李四","age":80}]'
		},
		{
			"id": "2",
			"info": '[{"name":"王五","age":90},{"name":"郑六","age":100}]'
		}
	]
}
data.records.forEach(element => {
	for(let i = 0, len = element.info.length; i < len; i++) {
		console.log(element.info[i].name) // undefined
	}
})

如上面代码中的info属性值就是一个字符串类型,前端拿到后是不能直接使用的,需要用 JSON.parse 转化一下 

data.records.forEach(element => {
	element.info = JSON.parse(element.info)
	for(let i = 0, len = element.info.length; i < len; i++) {
		console.log(element.info[i].name) //张三 李四 王五 郑六
	}
})

在使用JSON.parse时,处理的参数需要是严格的json格式,key值要使用双引号包括,否则会出错;下面这种写法就会报错

"info": "[{'name':'王五','age':90},{'name':'郑六','age':100}]" // Uncaught SyntaxError: Unexpected token ' in JSON at position 2

如果字符串外层使用双引号,内层也使用双引号,可以使用 \ 转义一下

let data = {
	records: [
		{
			"id": "1",
			"info": "[{\"name\":\"张三\",\"age\":60},{\"name\":\"李四\",\"age\":80}]"
		},
		{
			"id": "2",
			"info": “[{\"name\":\"王五\",\"age\":90},{\"name\":\"郑六\",\"age\":90}]”
		}
	]
}

你可能感兴趣的:(问题记录,js,前端,json)