方法一:eval()
使用eval();注意一定要加小括号(),否则会转换失败。
小括号在此处的作用,是强制表达式运算,将语句变成表达式。
// 将文本转换为Js对象
let test = "{age: 12, name: 'Wong'}";
let obj = eval(`( ${test} )`);
console.log(Object.prototype.toString.call(obj)); // [object Object]
// 将文本转换为数组对象
let test = "[1,2,3]";
let arr = eval(`( ${test} )`);
console.log(Object.prototype.toString.call(arr)); // [object Array]
方法三:Function
关于Js中的new Function()
当new Function()
的参数是某个字符串时,编译器会将参数中的字符串当做正常的脚本代码来执行。利用这种方法来把字符串转为对象,可以简单的想象成就是new出一个对象。
// 将文本转换为Js对象
let test = '{"age": "12", "name": "Wong"}';
let obj = (new Function("return " + test))();
console.log(Object.prototype.toString.call(obj)); // [object Object]
// 将文本转换为数组对象
let test = "[1,2,3]";
let arr = (new Function("return " + test))();
console.log(Object.prototype.toString.call(arr)); // [object Array]
方法二:JSON.parse()
// 将文本转换为Js对象
let test = '{"age": "12", "name": "Wong"}';
let obj = JSON.parse(test);
console.log(Object.prototype.toString.call(obj)); // [object Object]
// 将文本转换为数组对象
let test = "[1,2,3]";
let arr = JSON.parse(test);
console.log(Object.prototype.toString.call(arr)); // [object Array]
使用JSON.parse()
转化json对象,需要注意:
1.字符串的数据格式
let str = '{"age": 12, "name": "Wong"}';
其中的age属性、name属性都必须用双引号引起来。
而不能写成对象形式的字符串(key键没有用双引号),如:let str = '{age: 12, name: "Wong"}';
以上代码使用JSON.parse()
来转化会报错,因为使用JSON.parse()
需要严格遵守JSON规范。
2.单引号和双引号
let str = '{"age": 12, "name": "Wong"}';
是使用单引号来套住双引号;如果改变 单引号 和 双引号 的关系,如:let str = "{'age': 12, 'name': 'Wong'}";
如果还是使用JSON.parse()
来转化就会报错。
总结:
如果使用JSON.parse()
方法来转化成json对象的数据格式的话,就需要注意被转化的字符串里面的属性要使用引号,并且总体是以单引号套住双引号的方式。
而如果使用eval()
或者new Function()
的方式来转化的话,即可忽略上述两点。