关于JSON.stringify的细节

本文探讨了JSON作为web服务器数据交换的常用格式,详细解释了如何使用JSON.stringify()将JavaScript对象转换为字符串,以及这一过程中的数据类型处理,如自动拆箱和原始值转换。

JSON 的常规用途是同 web 服务器进行数据交换。
在向 web 服务器发送数据时,数据必须是字符串。
通过 JSON.stringify() 把 JavaScript 对象转换为字符串。

js会有一个自动拆箱功能,而stringify正好相反

let a1 ="1";
let a2 =1
let b1 ="true"
let b2 =true
let c ="str"

//默认会自动拆箱(布尔值不会)
console.log(a1+":"+b1+":"+c)//1:true:str
console.log(a2+":"+b2+":"+c)//1:true:str
console.log(a1==a2)//true
console.log(b1==b2)//false

// 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
console.log(JSON.stringify(a1)+":"+JSON.stringify(b1)+":"+JSON.stringify(c))// "1":"true":"str"
console.log(JSON.stringify(a2)+":"+JSON.stringify(b2)+":"+JSON.stringify(c))//  1: true: "str"

console.log(JSON.stringify(a1)==JSON.stringify(a2))//false
console.log(JSON.stringify(b1)==JSON.stringify(b2))//false
### 鸿蒙系统中 `JSON.stringify` 方法的使用 在鸿蒙操作系统环境中,`JSON.stringify()` 方法遵循标准 JavaScript 行为,用于将一个值转换成 JSON 字符串。然而,在特定情况下,某些对象可能无法被成功序列化。 对于大多数常规数据结构而言,如数字、字符串、布尔值、数组和普通对象,可以直接应用此方法并获得预期的结果[^1]: ```javascript const simpleData = { name: "Alice", age: 25 }; console.log(JSON.stringify(simpleData)); // 输出: {"name":"Alice","age":25} ``` 当涉及到特殊类型的对象时,则需格外注意。例如,继承自 Error 的类实例(像 HarmonyOS 中定义的 BusinessError),由于其内部含有不可序列化的属性,因此调用 `JSON.stringify()` 可能不会得到理想效果[^2]: ```javascript try { throw new BusinessError("An error occurred"); } catch (e) { console.log(JSON.stringify(e)); // 结果可能是 "{}" } ``` 为了应对这种情况,可以在序列化之前手动提取所需的信息字段或将错误信息转化为适合序列化的形式再进行操作: ```javascript function serializeError(errorObj) { const serializableError = {}; Object.getOwnPropertyNames(errorObj).forEach((propName) => { try { if (typeof errorObj[propName] !== 'object' || errorObj[propName] === null) { serializableError[propName] = errorObj[propName]; } else { serializableError[propName] = '[Object]'; } } catch (_) {} }); return JSON.stringify(serializableError); } // 使用示例 try { throw new BusinessError("Another issue happened."); } catch (err) { console.log(serializeError(err)); } ``` 此外,如果目标是在不同上下文中复制复杂的数据结构而不丢失任何细节,那么应当考虑其他替代方案来代替单纯依赖 `JSON.stringify()` 和 `JSON.parse()` 实现深拷贝的功能[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这次最后一次熬夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值