在 TS 中如何安全的使用 `JSON.parse()`
在 TS 中如何安全的使用 JSON.parse()
我们来谈论下大家都比较熟悉的 JSON.parse()
,大家都知道我们可以使用此方法来完成将一个 json 字符串解析为一个对象。比如
json
1 | const jsonString = '{ "title": "Title" }' |
问题
你是否想过咋样一个问题:当你搞乱 json 字符串的值时会发生什么?比如将上面代码示例中的 '{ "title": "Title" }'
修改为 ''
。那么 JSON.parse()
会抛出一个错误:
json
1 | const jsonString = '' |
这看起来是一个小问题,但是大多数的开发者可能忘记正确的处理这个问题。
在 TypeScript 中,
JSON.parse()
没有任何特定类型参数, 它只返回 any
类型。 这意味着,它是以失去静态类型和类型安全的优势为代价的。typescript
1 | interface JSON { |
当开发人员将潜在不安全的数据视为完全安全时,可能会导致一些意想不到的问题。
解法
写一个
safeJsonParse
函数typescript1
2
3
4
5
6
7
8
9const safeJsonParse = <T>(str: string) => {
try {
const jsonValue: T = JSON.parse(str);
return jsonValue;
} catch {
return undefined;
}
};
// const safeJsonParse: <T>(str: string) => T | undefined ✅增加兜底
typescript1
2
3
4
5
6
7
8interface JsonValue {
title: string
}
const jsonString = '{ "title": "Title" }'
const jsonValue = safeJsonParse<JsonValue>(jsonString) || { "title": "" }
// const jsonValue: JsonValue ✅为了防止
jsonValue
的值为undefined
,我们可以添加一个兜底机制。 这确保了无论发生什么情况,jsonValue
始终是有值的。结论
因此,如果我们正确的处理这些小问题,我们就能避免一些令人头疼的问题,并使我们的代码变得更加健壮。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 忘忧杂货铺!
评论