安全地使用`json.parse()`在打字稿中
#javascript #react #typescript #json

让我们谈谈我们大多数人可以与: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,我们可以添加后备机制。这可以确保将始终提供价值,无论发生什么。

结论

因此,如果我们牢记这些事情,我们将避免头痛并使我们的代码超级稳固。希望您发现这些技巧对您的项目有用!你明白了! -