JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。在JavaScript中,JSON解析是将JSON格式的字符串转换为JavaScript对象的过程。
这是JavaScript内置的标准方法,也是最推荐的JSON解析方式。
const jsonString = '{"name":"John", "age":30, "city":"New York"}';
const obj = JSON.parse(jsonString);
console.log(obj.name); // 输出: John
优势:
JSON.parse()可以接受第二个参数作为reviver函数,用于在返回前转换解析结果:
const jsonString = '{"name":"John", "age":30, "birthDate":"1985-04-12"}';
const obj = JSON.parse(jsonString, (key, value) => {
if (key === 'birthDate') return new Date(value);
return value;
});
console.log(obj.birthDate.getFullYear()); // 输出: 1985
function safeJsonParse(str) {
try {
return JSON.parse(str);
} catch (e) {
console.error("解析JSON失败:", e);
return null; // 或者返回默认值
}
}
const result = safeJsonParse('invalid json');
JSON没有日期类型,日期通常以字符串形式传输。
解决方案:
const jsonString = '{"date":"2023-01-01T12:00:00Z"}';
const obj = JSON.parse(jsonString, (k, v) => {
if (typeof v === 'string' && /^\d{4}-\d{2}-\d{2}/.test(v)) {
return new Date(v);
}
return v;
});
当对象有循环引用时,直接JSON.stringify会报错。
解决方案:
使用库如flatted
或实现自定义序列化。
解决方案:
// 使用setTimeout分块处理
function parseLargeJson(jsonString, callback) {
const chunks = jsonString.match(/.{1,10000}/g);
let result = {};
function processChunk(i) {
if (i >= chunks.length) {
callback(result);
return;
}
try {
const partial = JSON.parse(chunks[i]);
Object.assign(result, partial);
} catch (e) {
console.error("解析部分JSON失败", e);
}
setTimeout(() => processChunk(i + 1), 0);
}
processChunk(0);
}
JSON.parse()
而非eval()
(安全考虑)没有搜到相关的文章