JavaScript JSON 和对象怎么转换
你有没有遇到过这种情况:想把手机里的通讯录名单整理成一份可分享的表格,却因为格式太乱没法直接发出去?或者想把电脑里的零散照片打包成一个压缩包,方便朋友下载?在编程里,也有类似的“打包、拆分”需求,而JavaScript里的对象和JSON,就是一对专门做这件事的好搭档。
先搞懂:对象和JSON是什么
先说说编程里的“对象”。你可以把它想象成一个带抽屉的小柜子,每个抽屉上贴了标签(比如“姓名”“年龄”),抽屉里放着对应的东西(比如“张三”“25”)。比如写一个存储用户信息的对象:

`javascript
const user = {
name: "张三",
age: 25,
isStudent: false
};
`
这个小柜子里的东西是“活”的,你可以随时拉开抽屉改内容——比如把年龄改成26,或者加个“地址”的新抽屉。
那JSON是什么?它是一种通用的“打包格式”,就像把小柜子里的东西按固定规则打包成一个密封的信封,信封上的标签和内容都得是标准格式,不能乱加自己的符号。比如上面的用户信息,打包成JSON就是:
`json
{"name":"张三","age":25,"isStudent":false}
`
这个信封是“死”的,里面的内容没法直接改,而且只能用双引号,不能写注释,也不能有多余的空格,就像你给朋友寄快递得按快递单规则填一样。
把对象转成JSON:用JSON.stringify()
什么时候需要把对象转成JSON?比如你要把用户信息发给后端服务器,或者存到浏览器的本地缓存里——服务器和缓存只能接收这种标准格式的“信封”,不能接收编程里的“小柜子”。这时候就用JSON.stringify()方法。
举个生活化的例子:你把自己的玩具收纳盒(对象)整理成一个标准的礼品盒(JSON),方便寄给远方的亲戚。刚才的user对象,转成JSON只需要一行代码:
`javascript
const userJson = JSON.stringify(user);
console.log(userJson);
// 输出:{"name":"张三","age":25,"isStudent":false}
`
这里有个小坑要注意:如果对象里有函数、日期对象这类特殊东西,转成JSON会直接丢失——比如加个sayHi: function() { alert("你好") },转成JSON后这个函数就没了,因为JSON只存普通数据,不存“动作”。
把JSON转成对象:用JSON.parse()
反过来,如果别人给你寄了一个标准的礼品盒(JSON),你要把它拆开变成自己能随便拿取的收纳盒(对象),就用JSON.parse()方法。这也是前端开发最常用的操作之一,比如你从缓存里取出之前存的用户JSON,要改成新的名字,就得先转成对象。
继续用刚才的例子:你收到亲戚寄来的礼品盒(userJson),要把它变回可修改的收纳盒:
`javascript
const newUser = JSON.parse(userJson);
console.log(newUser.name); // 输出:张三
newUser.age = 26; // 现在可以随便改年龄了
`
如果收到的JSON格式不对——比如漏了双引号,或者加了中文的引号,这个方法就会报错,就像你收到一个拆不开的、填错地址的快递,得先检查格式对不对。
日常开发里的真实场景
为什么要频繁做这两个转换?举两个你可能遇到的例子:
- 刷短视频时,点赞后的状态会存在浏览器缓存里,前端会把用户的点赞信息(对象)转成JSON存起来;下次打开视频时,再把JSON转成对象,就能直接显示你之前的点赞状态。
- 网购提交订单时,你选的商品信息会打包成JSON发给后端,后端收到后转成自己的对象处理订单,再返回结果给你。
只要记住:对象是“可修改的收纳盒”,JSON是“通用的密封信封”,转换的工具就是stringify和parse,就能轻松搞定日常开发里的这类需求了。