上一篇
📢 最新动态(2025年08月)
随着Web应用对实时数据交互的需求激增,JSON已成为前后端通信的“黄金标准”,ECMAScript 2025草案提出优化JSON.parse()
性能的提案,预计在Chrome 118和Firefox 130中实现解析速度提升15%!
前端从接口、本地存储或URL参数获取的JSON数据,通常是字符串格式(如'{"name":"小明","age":18}'
),但字符串无法直接访问属性,必须转为JS对象才能操作:
const jsonStr = '{"name":"小明","age":18}'; console.log(jsonStr.name); // ❌ undefined
const jsonStr = '{"name":"小明","age":18}'; const jsonObj = JSON.parse(jsonStr); console.log(jsonObj.name); // ✅ "小明"
如果字符串格式错误(如缺少引号),会抛出异常:
try { JSON.parse('{name:"小明"}'); // ❌ 键名缺少引号 } catch (e) { console.error("解析失败:", e.message); // 输出错误详情 }
第二个参数可对解析结果进行二次处理:
const str = '{"date":"2025-08-20"}'; const obj = JSON.parse(str, (key, value) => { if (key === "date") return new Date(value); return value; }); console.log(obj.date.getFullYear()); // ✅ 2025
const jsonStr = '{"name":"小明"}'; const jsonObj = eval('(' + jsonStr + ')'); // 加括号避免语法歧义 console.log(jsonObj.name); // "小明"
❗ 风险:可能执行恶意代码,仅限完全可信的数据源
比eval
稍安全:
const jsonStr = '{"name":"小明"}'; const jsonObj = new Function('return ' + jsonStr)(); console.log(jsonObj.name); // "小明"
const data = JSON.parse('{"user":{"profile":{"avatar":"img.jpg"}}}'); console.log(data.user.profile.avatar); // "img.jpg"
fetch('/api/data') .then(res => res.json()) // 内置JSON.parse() .then(data => console.log(data));
大数据量时可用JSON.parse()
的reviver
惰性解析:
const bigData = '{"items":[...大量数据...]}'; JSON.parse(bigData, (k, v) => { if (k === "items") return v.slice(0, 100); // 只解析前100条 return v; });
❓ Q:JSON字符串和JS对象有什么区别?
✅ A:JSON字符串是文本格式(带引号),JS对象是内存中的数据结构
❓ Q:JSON.parse('null')
返回什么?
✅ A:返回JS的null
(合法JSON值)
❓ Q:如何让解析后的日期自动转Date对象?
✅ A:使用reviver函数或后续处理(JSON本身不支持日期类型)
方法 | 安全性 | 可定制性 | 适用场景 |
---|---|---|---|
JSON.parse() |
99%常规情况 | ||
eval() |
绝对可信数据源 | ||
new Function() |
需要动态解析时 |
2025年建议:优先使用JSON.parse()
并配合try-catch
,安全又高效! 🚀
本文由 缑碧白 于2025-08-01发表在【云服务器提供商】,文中图片由(缑碧白)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/502628.html
发表评论