javascript怎样解析JSON字符串_如何使用JSON.parse方法?
发布时间 - 2026-01-07 00:00:00 点击率:次JSON.parse要求严格双引号、无单引号、键名必须引号、换行需转义;仅接受字符串,否则TypeError;须用try...catch捕获SyntaxError;reviver可转换类型但慎用;JSON.parse(JSON.stringify(obj))不能替代深拷贝。
JSON 字符串必须是严格格式,否则 JSON.parse 会直接抛出 SyntaxError —— 这不是“解析失败”,而是语法不合法,根本不会进入逻辑处理阶段。
JSON.parse 基本用法与常见报错
JSON.parse 只接受字符串输入,传入对象、null、数字或 undefined 都会立即报 TypeError。最常踩的坑是误把已解析的对象再 parse 一次:
const data = { "name": "Alice" };
JSON.parse(data); // TypeError: Cannot parse object另一个高频错误是字符串里混用了单引号或未转义的换行:
-
"{'name': 'Bob'}"→ 单引号非法,JSON 只认双引号 -
"{name: 'Bob'}"→ 键名没加引号,非法 -
"{\n"name": "Bob"}"→ 换行未转义,SyntaxError
如何安全地解析并捕获错误
永远不要裸调 JSON.parse。真实场景中,输入可能来自用户输入、localStorage、fetch 响应体等不可信源,必须包裹 try...catch:
function safeParse(jsonStr) {
try {
return JSON.parse(jsonStr);
} catch (err) {
if (err instanceof SyntaxError) {
console.error("JSON 格式错误:", err.message);
return null;
}
throw err;
}
}注意:不要只检查 err.name === "SyntaxError",用
instanceof 更可靠;也不要忽略其他可能异常(如内存溢出),但绝大多数情况就是 SyntaxError。
reviver 参数的实用场景
JSON.parse 的第二个参数 reviver 是个函数,能在解析过程中逐层修改值,适合做类型转换或过滤:
const json = '{"date":"2025-10-05","count":42}';
const obj = JSON.parse(json, (key, value) => {
if (key === "date") return new Date(value);
if (key === "count" && typeof value === "number") return value * 2;
return value;
});
// obj.date 是 Date 实例,obj.count 是 84注意:reviver 会遍历每个键值对(包括嵌套对象),返回 undefined 会删除该属性;如果对性能敏感(比如解析 MB 级 JSON),避免在 reviver 中做重操作。
和 JSON.stringify 的配对陷阱
JSON.parse(JSON.stringify(obj)) 常被误用作“深拷贝”,但它会丢失:
-
Date、RegExp、undefined、Function、Symbol -
NaN和Infinity被转为null - 循环引用直接抛错
如果只是想序列化后立刻解析回来,确保原始数据只含 JSON 安全类型(string/number/boolean/null/object/array)。否则,该用 structuredClone(现代浏览器)或专用深拷贝库。
# javascript
# java
# js
# json
# 浏览器
# 键值对
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在万网开始建站?分步指南解析
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何用wdcp快速搭建高效网站?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何在建站主机中优化服务器配置?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
奇安信“盘古石”团队突破 iOS 26.1 提权
千库网官网入口推荐 千库网设计创意平台入口
如何在万网利用已有域名快速建站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
南京网站制作费用,南京远驱官方网站?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何在IIS中配置站点IP、端口及主机头?
长沙企业网站制作哪家好,长沙水业集团官方网站?
详解CentOS6.5 安装 MySQL5.1.71的方法
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
简单实现Android文件上传
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
手机网站制作与建设方案,手机网站如何建设?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
活动邀请函制作网站有哪些,活动邀请函文案?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何确保FTP站点访问权限与数据传输安全?
高防服务器租用首荐平台,企业级优惠套餐快速部署
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
网站优化排名时,需要考虑哪些问题呢?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何基于PHP生成高效IDC网络公司建站源码?
如何在VPS电脑上快速搭建网站?
如何解决hover在ie6中的兼容性问题
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
如何快速搭建自助建站会员专属系统?
Laravel API资源类怎么用_Laravel API Resource数据转换
Bootstrap整体框架之JavaScript插件架构
魔毅自助建站系统:模板定制与SEO优化一键生成指南
iOS发送验证码倒计时应用
如何用搬瓦工VPS快速搭建个人网站?

