由于后端同事提供的数据格式是不可控,有时接口拿到的数据格式是这样的。(不能说服这个好兄弟只能惯着他了,就很气~~) 接口数据如下图
下面通过简单的数据来测试以便观察
(比如:str='["a","b","c","d"]'
,写成str="['a', 'b', 'c', 'd']"
,使用JSON.parse()
的时候会报错)。要将这种字符串还原成数组对象
JSON的解析方法有两种:eval()和JSON.parse()
二者的区别在于:JSON.parse()可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()可以解析任何字符串,eval()会执行字符串的代码,造成原先字符串的值改变,是不安全的。
1,使用 eval() 函数转换
(1)eval(s)函数将去掉字符串s最外侧的引号,并按照Python语句方式执行去掉引号后的字符内容。
const str = '["a", "b", "c", "d"]';
const arr = eval('(' + str + ')');
//控制台打印
console.log(str)
console.log(arr)
2、使用 JSON.parse() 方法转换
JSON.parse(jsonstr)将格式完好的json字符串转换为json对象。所谓"格式完好",就是要求jsonstr必须符合严格的JSON格式,例如:属性名称必须用双引号,字符串值也必须用双引号括起来,单引号写在{}外。
const array = '["a", "b", "c", "d"]';
const arr = JSON.parse(array);
//控制台打印
console.log(str)
console.log(arr)
扩展:jQuery.parseJSON(json)方法将字符串转换成js对象)
传入一个畸形的JSON字符串会抛出一个异常。比如下面的都是畸形的JSON字符串:
{test: 1} ( test 没有包围双引号)
{'test': 1} (使用了单引号而不是双引号)
另外,如果你什么都不传入,或者一个空字符串、null或undefined,parseJSON都会返回 null 。
示例:
var str = '{"name":"John"}';
var obj = jQuery.parseJSON(str);
//控制台打印
console.log(obj);