将数组格式的字符串转换成数组

257 阅读2分钟

由于后端同事提供的数据格式是不可控,有时接口拿到的数据格式是这样的。(不能说服这个好兄弟只能惯着他了,就很气~~) 接口数据如下图

image.png

下面通过简单的数据来测试以便观察 (比如: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)   

image.png

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)    

image.png

扩展:jQuery.parseJSON(json)方法将字符串转换成js对象)
传入一个畸形的JSON字符串会抛出一个异常。比如下面的都是畸形的JSON字符串:	  
  
{test: 1} ( test 没有包围双引号) 

{'test': 1} (使用了单引号而不是双引号) 

另外,如果你什么都不传入,或者一个空字符串、nullundefined,parseJSON都会返回 null 。

示例:
var str = '{"name":"John"}';
var obj = jQuery.parseJSON(str);
 //控制台打印
console.log(obj);

image.png

路过点赞一起变得更强!