TypeScript JsonProperty 注解
在 TypeScript 中,JsonProperty 注解是用于指定类属性与 JSON 字段之间的映射关系的装饰器。通过使用 JsonProperty 注解,我们可以方便地实现将 JSON 数据转换为 TypeScript 对象,或将 TypeScript 对象转换为 JSON 数据。
安装和导入
要使用 JsonProperty 注解,首先需要安装 reflect-metadata
和 class-transformer
两个库。
```shell
npm install reflect-metadata class-transformer
然后,我们需要在项目的入口文件中导入这两个库,并启用元数据的反射功能。
```typescript
import 'reflect-metadata';
基本用法
在 TypeScript 类的属性上使用 JsonProperty 注解,可以指定该属性与 JSON 字段之间的映射关系。例如,我们有一个名为 User
的类,并且想要将 name
属性映射为 JSON 中的 username
字段。
```typescript
import { JsonProperty } from 'class-transformer';
class User {
@JsonProperty({ name: 'username' })
name: string;
}
在上述示例中,我们使用 @JsonProperty({ name: 'username' })
将 name
属性映射为 JSON 中的 username
字段。
嵌套对象
如果我们的类属性是一个嵌套对象,我们可以使用 @Type
注解来指定嵌套对象的类型。
```typescript
import { JsonProperty, Type } from 'class-transformer';
class Address {
@JsonProperty({ name: 'street' })
street: string;
@JsonProperty({ name: 'city' })
city: string;
}
class User {
@JsonProperty({ name: 'name' })
name: string;
@JsonProperty({ name: 'address' })
@Type(() => Address)
address: Address;
}
在上述示例中,我们使用 @Type(() => Address)
将 address
属性标记为 Address 类型。
数组属性
如果我们的类属性是一个数组,我们可以使用 @Type
和 @Transform
注解来指定数组元素的类型和转换函数。
```typescript
import { JsonProperty, Type, Transform } from 'class-transformer';
class Product {
@JsonProperty({ name: 'name' })
name: string;
@JsonProperty({ name: 'price' })
@Transform((value) => parseFloat(value))
price: number;
}
class Order {
@JsonProperty({ name: 'id' })
id: number;
@JsonProperty({ name: 'products' })
@Type(() => Product)
products: Product[];
}
在上述示例中,我们使用 @Type(() => Product)
将 products
属性标记为 Product 类型的数组。
转换为 JSON
要将 TypeScript 对象转换为 JSON 数据,我们可以使用 class-transformer
库中的 classToPlain
函数。
```typescript
import { classToPlain } from 'class-transformer';
const user = new User();
user.name = 'John Doe';
const json = classToPlain(user);
console.log(json);
输出结果为:
```json
{
"name": "John Doe"
}
转换为对象
要将 JSON 数据转换为 TypeScript 对象,我们可以使用 class-transformer
库中的 plainToClass
函数。
```typescript
import { plainToClass } from 'class-transformer';
const json = {
"name": "John Doe"
};
const user = plainToClass(User, json);
console.log(user);
输出结果为:
```typescript
User { name: 'John Doe', address: undefined }
总结
通过 JsonProperty 注解和 class-transformer 库,我们可以方便地实现 TypeScript 对象与 JSON 数据之间的转换。使用 JsonProperty 注解,我们可以指定类属性与 JSON 字段之间的映射关系,同时还可以处理嵌套对象和数组属性。希望本文对你理解和使用 JsonProperty 注解提供了帮助。
表格:
属性 | 描述 |
---|---|
name |
JSON 中的字段名 |
@Type |
指定属性的类型 |
@Transform |
指定属性的转换函数,将属性的值进行转换 |
classToPlain |
将 TypeScript 对象转换为 JSON 数据 |
plainToClass |
将 JSON 数据转换为 TypeScript 对 |