文章插图
英文 | https://medium.com/frontend-canteen/my-friend-almost-lost-his-year-end-bonus-because-of-json-stringify-9da86961eb9e
翻译 | 杨小爱
这是发生在我朋友身上的真实故事 , 他的绰号叫胖头 。由于JSON.stringify的错误使用 , 他负责的其中一个业务模块上线后出现了bug , 导致某个页面无法使用 , 进而影响用户体验 , 差点让他失去年终奖 。
在这篇文章中 , 我将分享这个悲伤的故事 。然后我们还将讨论 JSON.stringify 的各种功能 , 以帮助您避免将来也犯同样的错误 。
我们现在开始
故事是这样的 。
他所在的公司 , 有一位同事离开了 , 然后胖头被要求接受离开同事的工作内容 。
没想到 , 在他接手这部分业务后不久 , 项目中就出现了一个bug 。
当时 , 公司的交流群里 , 很多人都在讨论这个问题 。
产品经理先是抱怨:项目中有一个bug , 用户无法提交表单 , 客户抱怨这个 。请开发组尽快修复 。
然后测试工程师说:我之前测试过这个页面 , 为什么上线后就不行了?
而后端开发者说:前端发送的数据缺少value字段 , 导致服务端接口出错 。
找到同事抱怨后 , 问题出在他负责的模块上 , 我的朋友胖头真的很头疼 。
【我的朋友因为 JSON.stringify 差点丢了奖金】经过一番检查 , 我的朋友终于找到了这个错误 。
事情就是这样 。
发现页面上有一个表单允许用户提交数据 , 然后前端应该从表单中解析数据并将数据发送到服务器 。
表格是这样的:(下面是我的模拟)
文章插图
这些字段是可选的 。
通常 , 数据应如下所示:
let data = https://www.isolves.com/it/cxkf/bk/2022-11-07/{
signInfo: [
{
"fieldId": 539,
"value": "silver card"
},
{
"fieldId": 540,
"value": "2021-03-01"
},
{
"fieldId": 546,
"value": "10:30"
}
]
}
文章插图
然后它们应该转换为:
文章插图
但问题是 , 这些字段是可选的 。如果用户没有填写某些字段 , 那么数据会变成这样:
let data = https://www.isolves.com/it/cxkf/bk/2022-11-07/{
signInfo: [
{
"fieldId": 539,
"value": undefined
},
{
"fieldId": 540,
"value": undefined
},
{
"fieldId": 546,
"value": undefined
}
]
}
文章插图
他们将变成这样:
文章插图
JSON.stringify 在转换过程中忽略其值为undefined的字段 。
因此 , 此类数据上传到服务器后 , 服务器无法解析 value 字段 , 进而导致错误 。
一旦发现问题 , 解决方案就很简单 , 为了在数据转换为 JSON 字符串后保留 value 字段 , 我们可以这样做:
文章插图
let signInfo = [
{
fieldId: 539,
value: undefined
},
{
fieldId: 540,
value: undefined
},
{
fieldId: 546,
value: undefined
推荐阅读
- 谢谢你医生|看了八集《谢谢你医生》,发现演技不能比较,因为优与劣一目了然
- 陈佩斯|为何很多人对陈佩斯的评价高于赵本山?是因为人品的原因吗?
- 董卓是因为貂蝉死的吗,杀了董卓之后貂蝉去哪里了-
- 张嘉益|金鹰奖失礼一幕:张嘉译最尴尬,因为没参加颁奖,所以不配推荐?
- 13种生发中药
- 运动减肥怎么喝水?
- 秦国这么强大到底因为什么灭,秦国这么强大为什么会被灭-
- 郭晶晶|霍启刚:郭晶晶比赛我最紧张,因为跟我恋爱错失冠军,我要被骂死
- 刘涛|41岁刘涛当众表演倒立,因为衣服不对劲,不小心......
- 血橙怎么吃