当前位置: 首页 > 知识库问答 >
问题:

如何在Typescript中解析JSON字符串

呼延景同
2023-03-14

在typescript中有没有一种方法可以将字符串解析为JSON。
示例:在JS中,我们可以使用JSON.parse()。在Typescript中有类似的功能吗?

我有一个JSON对象字符串,如下所示:

{"name": "Bob", "error": false}

共有1个答案

江礼骞
2023-03-14

您可以继续使用json.parse,因为TS是一个JS超集。仍然存在一个问题:json.parse返回any,这破坏了类型安全。以下是两个更强类型的选项:

自定义类型保护是最简单的解决方案,通常足以进行外部数据验证:

// For example, you expect to parse a given value with `MyType` shape
type MyType = { name: string; description: string; }

// Validate this value with a custom type guard
function isMyType(o: any): o is MyType {
  return "name" in o && "description" in o
}

围绕json.parse创建一个泛型包装器,它接受一个类型保护作为输入,并返回解析的、类型化的值或错误结果:

const safeJsonParse = <T>(guard: (o: any) => o is T) => 
  (text: string): ParseResult<T> => {
    const parsed = JSON.parse(text)
    return guard(parsed) ? { parsed, hasError: false } : { hasError: true }
  }

type ParseResult<T> =
  | { parsed: T; hasError: false; error?: undefined }
  | { parsed?: undefined; hasError: true; error?: unknown }
const json = '{ "name": "Foo", "description": "Bar" }';
const result = safeJsonParse(isMyType)(json) // result: ParseResult<MyType>
if (result.hasError) {
  console.log("error :/")  // further error handling here
} else {
  console.log(result.parsed.description) // result.parsed now has type `MyType`
}

SafeJsonParse可能扩展为fail fast或try/catchjson.parse错误。

如果需要验证许多不同的值,手动编写类型保护函数将变得非常麻烦。有一些库可以帮助完成这项任务--示例(没有全面的列表):

  • IO-TS:具有FP-TS对等依赖关系,使用函数式编程风格
  • ZOD:与IO-TS
  • 相比,力求更加过程化/面向对象
  • typescript-is:编译器API的TS转换器,需要额外的包装器,如ttypescript
  • typescript-json-schema/ajv:从类型创建JSON模式,并用ajv
  • 验证它
    null
 类似资料:
  • 问题内容: 有没有一种方法可以将Typescript中的字符串解析为JSON。 示例:在JS中,我们可以使用。Typescript中有类似的功能吗? 我有一个JSON对象字符串,如下所示: 问题答案: Typescript是javascript(的超集),因此您可以像在javascript中那样使用它: 只有在打字稿中,您才能对结果对象进行打字: (操场上的代码)

  • 问题内容: 我正在从服务器获取JSON字符串,并且已经通过代码获取了JSON字符串。但是我不知道如何解析它。 以下是我的JSON字符串 请提供任何指导或代码段。 问题答案: 使用JSON类进行解析,例如

  • 问题内容: 我正在尝试解析以下JSONString 这是我的代码: 有人可以帮忙,我的代码不起作用吗?我想解析标题,公司名称,类别等… 问题答案: 您需要从您的jsonstring 创建。 你有里面然后..

  • 问题内容: 解析JSON似乎是这里讨论的一个相当普遍的话题。我环顾四周,但仍然找不到我想要的东西。这是我的HttpClient的代码 我正在使用HttpClient将JSON请求发送到服务器。然后,服务器以JSON返回响应。这很好。现在这是我遇到麻烦的地方。我从服务器接收到HttpEntity。然后,我将其变成看起来像这样的字符串。 我希望能够将此字符串发送到我的方法,并且它返回键值映射。我觉得这

  • 问题内容: 我有一个要在Ruby中解析的字符串: 有没有一种简单的方法可以提取数据? 问题答案: 看起来像JavaScript Object Notation(JSON) 。您可以解析驻留在某个变量(例如)中的JSON ,如下所示: 如果您使用的是较旧的Ruby,则可能需要安装json gem。 还有其他针对JSON的JSON实现,可能更适合某些用例: Ruby的YAJL C绑定 JSON ::流

  • 我正在尝试在java中解析JSON字符串以单独打印单个值。但是在运行程序时,我得到了以下错误- 我的班级看起来像- 让我知道我遗漏了什么,或者每次运行应用程序时都会出现错误的原因。如有任何意见,将不胜感激。