抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了JS处理JSON数据的方法和技巧。

1 简介

JSON是JS的内置对象,提供了处理JSON数据的方法。

JSON对象主要包含两个方法:

  • JSON.parse()方法将JSON字符串转换为JS对象。
  • JSON.stringify()方法将JS对象转换为JSON字符串。

2 字符串转对象

基本用法:

js
1
2
3
4
const jsonString = '{"name": "李四", "age": 18}';
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject.name); // "李四"
console.log(jsonObject.age); // 18

解析数组:

js
1
2
3
4
5
const jsonString = '["苹果", "香蕉", "橙子"]';
const array = JSON.parse(jsonString);
console.log(array[0]); // "苹果"
console.log(array[1]); // "香蕉"
console.log(array[2]); // "橙子"

解析嵌套对象:

js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const jsonString = `
{
"person": {
"name": "李四",
"address": {
"city": "北京",
"street": "人民路"
}
}
}
`;
const data = JSON.parse(jsonString);
console.log(data.person.name); // "李四"
console.log(data.person.address.city); // "北京"

在解析过程中转换值:

js
1
2
3
4
5
6
7
8
9
10
11
const jsonString = '{"name": "李四", "age": 18}';
const data = JSON.parse(jsonString, function(key, value) {
// 修改年龄显示
if (key === 'age') {
return value + '岁';
}
// 其他值保持不变
return value;
});
console.log(jsonObject.name); // "李四"
console.log(jsonObject.age); // 18岁

错误处理:

js
1
2
3
4
5
6
7
8
9
10
function safeParse(jsonString) {
try {
return JSON.parse(jsonString);
} catch (error) {
console.error('JSON解析错误:', error.message);
return null;
}
}
console.log(safeParse('{"name": "李四"}')); // {name: "李四"}
console.log(safeParse('{name: "李四"}')); // null

3 对象转字符串

基本用法:

js
1
2
3
4
5
6
7
8
const person = {
name: "李四",
age: 18,
hobbies: ["读书", "游泳"]
};
const jsonString = JSON.stringify(person);
// {"name":"李四","age":18,"hobbies":["读书","游泳"]}
console.log(jsonString);

转换规则:

js
1
2
3
4
5
6
7
8
9
10
11
const data = {
name: "李四",
age: 18,
date: new Date(), // 转换为字符串
nullValue: null, // 转换为null
nanValue: NaN, // 转换为null
undefinedValue: undefined, // 会被忽略
functionValue: function() {} // 会被忽略
};
// {"name":"李四","age":18,"date":"2023-10-15T03:45:00.000Z","nullValue":null,"nanValue":null}
console.log(JSON.stringify(data));

转换指定属性:

js
1
2
3
4
5
6
7
8
const person = {
name: "李四",
age: 18,
email: "lisi@example.com"
};
const jsonString = JSON.stringify(person, ['name', 'age']);
// {"name":"李四","age":18}
console.log(jsonString);

过滤敏感信息:

js
1
2
3
4
5
6
7
8
const jsonString = JSON.stringify(person, function(key, value) {
if (key === 'email') {
return value.replace(/@.*$/, '@***'); // 隐藏邮箱域名
}
return value;
});
// {"name":"李四","age":18,"email":"lisi@***"}
console.log(jsonString);

评论