让我们谈谈我们大多数人可以与:JSON.parse()
相关的事情。我们都知道我们用来将JSON字符串变成对象的东西。
const jsonString = '{ "title": "Title" }'
const jsonValue = JSON.parse(jsonString)
// { title: 'Title' }
问题
现在,这是什么...
您是否曾经想过当您弄乱jsonString
的价值时会发生什么?假设您将'{ "title": "Title" }'
更改为''
。好吧,猜怎么着?预期变成...错误! ðÖ
const jsonString = ''
const jsonValue = JSON.parse(jsonString)
// Error: Unexpected end of JSON input
这似乎是一个小问题,但是猜怎么着?许多开发人员忘记正确处理它!
现在,这是有趣的部分...
在打字稿中,JSON.parse()
没有任何特定类型的参数。它只是返回any
。这意味着,它是以失去静态打字和类型安全的好处的代价。
const jsonString = "";
const jsonValue = JSON.parse(jsonString)
// const jsonValue: any
当开发人员将潜在的不安全数据视为完全安全的情况下,可能会导致一些真正令人沮丧的错误。 ð«
解决方案
但是不用担心,我有几个解决方案! ðâ
1.创建“ SafeJsonParse”功能
const safeJsonParse = <T>(str: string) => {
try {
const jsonValue: T = JSON.parse(str);
return jsonValue;
} catch {
return undefined;
}
};
// const safeJsonParse: <T>(str: string) => T | undefined
此功能负责处理解析错误。如果在解析过程中发生错误,它将返回undefined
。否则,它将返回解析的JSON值及其相应的数据类型。
2.添加后备
interface JsonValue {
title: string
}
const jsonString = '{ "title": "Title" }'
const jsonValue = safeJsonParse<JsonValue>(jsonString) || { "title": "" }
// const jsonValue: JsonValue
以防万一值为undefined
,我们可以添加后备机制。这可以确保将始终提供价值,无论发生什么。
结论
因此,如果我们牢记这些事情,我们将避免头痛并使我们的代码超级稳固。希望您发现这些技巧对您的项目有用!你明白了! -