如何将 JSON 数据映射到 class

How to map JSON data to a class

我通过 Babel 创建了一个 ES6 class,我想将从服务器获取的 JSON 数据映射到 ES6 class。
有什么通用的方法吗?

User.js

export default class User {
  constructor() {
    this.firstName;
    this.lastName;
    this.sex;
  }
}

app.js

import User from "./classes/User";

var data = JSON.parse(req.responseText);
console.log(data.firstname); //Bob
//now...just set data one by one?

我会使用 Object.assign 将 JSON 对象合并到 this 中,如下所示:

class User {
  firstName;
  lastName;
  sex;

  constructor(data) {
    Object.assign(this, data);
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  }
}

var data = JSON.parse(req.responseText);
new User(data);

您可以使用这个 npm 包 https://www.npmjs.com/package/class-converter 将所有 JSON 映射到一个 class。 它看起来像以下一个:

import { property, toClass } from 'class-convert';

class UserModel {
  @property('i')
  id: number;

  @property()
  name: string;
}

const userRaw = {
  i: 1234,
  name: 'name',
};

// use toClass to convert plain object to class
const userModel = toClass(userRaw, UserModel);
// you will get a class, just like below one
{
  id: 1234,
  name: 'name',
}