一、基本定义
在计算机科学中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和可写性,便于程序处理。string转json就是将符合一定格式的文本数据转换成JSON格式的数据。
一般来说,字符串格式的数据转换成JSON对象一般是通过解析字符串中的数据,将其转换成JavaScript对象的方式来实现的。由于JSON格式和JavaScript对象格式很相近,可以很方便地完成转换,使用非常广泛。
示例代码:
const str = '{"name":"Tom","age":18,"gender":"male"}'; // 定义一个JSON格式的字符串
const obj = JSON.parse(str); // 将字符串转换为JavaScript对象
console.log(obj.name); // 打印结果:Tom
二、string转JSON的基本方法
在JavaScript中,string转JSON的主要方法是JSON.parse()和JSON.stringify(),分别用于将JSON字符串转换成JavaScript对象,以及将JavaScript对象转换成JSON字符串。
1. JSON.parse()
JSON.parse()方法用于将符合JSON格式的字符串转换成一个JavaScript对象。
示例代码:
const str = '{"name":"Tom","age":18,"gender":"male"}'; // 定义一个JSON格式的字符串
const obj = JSON.parse(str); // 将字符串转换为JavaScript对象
console.log(obj.name); // 打印结果:Tom
2. JSON.stringify()
JSON.stringify()方法用于将JavaScript对象转换成符合JSON格式的字符串。
示例代码:
const obj = {name:"Tom", age:18, gender:"male"}; // 定义一个JavaScript对象
const str = JSON.stringify(obj); // 将对象转换为JSON格式的字符串
console.log(str); // 打印结果:{"name":"Tom","age":18,"gender":"male"}
三、处理JSON字符串中的特殊字符
在JSON格式的字符串中,如果出现一些特殊字符,如回车符、换行符、斜杠等,需要进行转义处理,否则可能会出现解析错误。
在JavaScript中,可以使用String对象的replace()方法来进行转义处理。此外,也可以使用第三方的库如jquery来实现转义处理。
示例代码:
const str = '{"name":"Tom\n", "age":18}'; // 定义带有特殊字符的JSON格式的字符串
const result = str.replace(/\n/g, "\\n"); // 使用replace()方法进行转义处理
console.log(result); // 打印结果:{"name":"Tom\\n","age":18}
四、可定制的string转JSON
如果默认的string转json方法不能满足我们的需求,还可以通过传递一个回调函数来定制化转换方式,这个回调函数通常被称作“reviver函数”。
reviver函数的作用是可以控制解析出的JavaScript对象,可以在解析的过程中修改或删除不需要的属性,甚至可以生成新的属性。
示例代码:
const str = '{"name":"Tom", "age":18, "hobbies":["reading", "running", "swimming"]}';
const obj = JSON.parse(str, function(key, value) {
if (key === "hobbies") { // 删除"swimming"这个爱好
return value.filter(val => val !== "swimming");
}
return value;
});
console.log(obj); // 打印结果:{name: "Tom", age: 18, hobbies: ["reading", "running"]}
五、批量转换多个string为JSON
在处理大规模的数据时,需要一次性转换多个string为JSON对象。可以使用Promise.all或async/await来实现并行转换。
示例代码:
const strArr = ['{"name":"Tom", "age":18}', '{"name":"Jerry", "age":20}'];
// Promise.all实现并行转换
Promise.all(strArr.map(str => JSON.parse(str)))
.then(result => console.log(result)); // 打印结果:[{name: "Tom", age: 18}, {name: "Jerry", age: 20}]