如何将 JSON 对象解析为 TypeScript 对象

2024-06-26

我目前正在尝试将收到的 JSON 对象转换为具有相同属性的 TypeScript 类,但无法使其工作。我究竟做错了什么?

员工阶层

export class Employee{
    firstname: string;
    lastname: string;
    birthdate: Date;
    maxWorkHours: number;
    department: string;
    permissions: string;
    typeOfEmployee: string;
    note: string;
    lastUpdate: Date;
}

员工字符串

{
    "department": "<anystring>",
    "typeOfEmployee": "<anystring>",
    "firstname": "<anystring>",
    "lastname": "<anystring>",
    "birthdate": "<anydate>",
    "maxWorkHours": <anynumber>,
    "username": "<anystring>",
    "permissions": "<anystring>",
    "lastUpdate": "<anydate>"
    //I will add note later
}

我的尝试

let e: Employee = new Employee();

Object.assign(e, {
    "department": "<anystring>",
    "typeOfEmployee": "<anystring>",
    "firstname": "<anystring>",
    "lastname": "<anystring>",
    "birthdate": "<anydate>",
    "maxWorkHours": 3,
    "username": "<anystring>",
    "permissions": "<anystring>",
    "lastUpdate": "<anydate>"
});

console.log(e);

链接到 Typescript Playground https://www.typescriptlang.org/play/#src=class%20Employee%7B%0A%20%20%20%20firstname%3A%20string%3B%0A%20%20%20%20lastname%3A%20string%3B%0A%20%20%20%20birthdate%3A%20Date%3B%0A%20%20%20%20maxWorkHours%3A%20number%3B%0A%20%20%20%20department%3A%20string%3B%0A%20%20%20%20permissions%3A%20string%3B%0A%20%20%20%20typeOfEmployee%3A%20string%3B%0A%20%20%20%20note%3A%20string%3B%0A%20%20%20%20lastUpdate%3A%20Date%3B%0A%7D%0A%0Avar%20e%3A%20Employee%20%3D%20new%20Employee()%3B%0AObject.assign(e%2C%20%7B%0A%20%20%20%20%22department%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22typeOfEmployee%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22firstname%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22lastname%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22birthdate%22%3A%20%22%3Canydate%3E%22%2C%0A%20%20%20%20%22maxWorkHours%22%3A%203%2C%0A%20%20%20%20%22username%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22permissions%22%3A%20%22%3Canystring%3E%22%2C%0A%20%20%20%20%22lastUpdate%22%3A%20%22%3Canydate%3E%22%0A%7D)%3B%0Aconsole.log(e)%3B%0A


如果您使用打字稿界面 https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html#defining-types代替class,事情就更简单了:

export interface Employee {
    typeOfEmployee_id: number;
    department_id: number;
    permissions_id: number;
    maxWorkHours: number;
    employee_id: number;
    firstname: string;
    lastname: string;
    username: string;
    birthdate: Date;
    lastUpdate: Date;
}

let jsonObj = JSON.parse(employeeString); // string to "any" object first
let employee = jsonObj as Employee;

如果你想要一个class但是,简单的转换是行不通的。例如:

class Foo {
    name: string;
    public pump() { }
}

let jsonObj = JSON.parse('{ "name":"hello" }');
let fObj = jsonObj as Foo;
fObj.pump(); // crash, method is undefined!

对于一个类,您必须编写一个接受 JSON 字符串/对象的构造函数,然后迭代属性以手动分配每个成员,如下所示:

class Foo {
    name: string;

    constructor(jsonStr: string) {
        let jsonObj = JSON.parse(jsonStr);
        for (let prop in jsonObj) {
            this[prop] = jsonObj[prop];
        }
    }
}

let fObj = new Foo(theJsonString);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 JSON 对象解析为 TypeScript 对象 的相关文章

随机推荐

  • 为什么我的 HTML 文件无法在浏览器中显示?

    我正在学习如何使用文本编辑器 并且刚刚用它创建了我的第一个文件 它预览了正确的输出 但是当我在浏览器中运行它时 它给了我一个空白页面 正如您所看到的 doctype 和 html 标签以及 head 和 body 都已就位 我使用 Visu
  • OCaml:设置模块

    我想使用 OCaml 生成数据集并在它们之间进行比较 我看过模块类型的文档 例如Set OrderType Set Make等等 但我不知道如何初始化一组或以其他方式使用它们 集合是使用函数接口定义的 对于任何给定的类型 您必须创建一个Se
  • 当托管在 IIS 中时,如何通过代码配置 WCF 服务?

    我的 WCF 服务公开 https 和 http 端点 除了 SSL 之外 它们是相同的 它们映射到相同的代码 最终目的是外部用户通过https连接 内部用户使用http 在开发中这给我带来了一个问题 Cassini VS 中打包的开发 W
  • BOOST_FUSION_ADAPT_TPL_STRUCT 和模板数组大小

    我正在尝试迭代 C 模板结构 这要归功于BOOST FUSION ADAPT TPL STRUCT http www boost org doc libs 1 53 0 libs fusion doc html fusion adapted
  • “窃取工作”与“耸肩工作”?

    为什么我可以找到很多关于 工作窃取 的信息 而没有找到关于 工作耸肩 作为动态负载平衡策略的信息 我所说的 工作耸肩 是指pushing将多余的工作从繁忙的处理器转移到负载较少的邻居上 而不是让处理器闲置pulling从忙碌的邻居那里获取工
  • 变量可以存储在图像或 div 标签中吗?

    我已经成功地创建了一个巨大的div其中包含许多小divs 附加到它上面 所以它创建了一个网格 我的目标是能够在每个较小的变量中存储两个变量divs 瓷砖 目前 我可以通过更改较小的图块来存储一个值innerHTML 但是 我希望能够存储的不
  • 未捕获(承诺中)DOMException:注册失败 - 清单为空或丢失

    我正在尝试使用 Polymer 实现推送通知 我跟着这个链接 https developers google com web fundamentals getting started push notifications 并能够让服务人员注
  • 现有 UIPopoverController 中的 UIImagePickerController

    有没有办法将 UIImagePickerController 推送到现有 UIPopoverController 的导航控制器中 我所知道的是 您必须创建一个新的弹出窗口并在其中添加 UIImagePickerController 但我有一
  • Python 中的文字可以被覆盖吗?

    找不到更好的方式来表达标题 请随时更正 我对 Python 还很陌生 目前正在尝试该语言 我注意到所有内置类型都不能与其他成员一起扩展 例如 我想添加一个each方法到list类型 但那是不可能的 我意识到它是出于效率原因而设计的 并且大多
  • 如何在javascript中访问文件? [复制]

    这个问题在这里已经有答案了 是否可以在 JavaScript 中访问扩展名为 txt 或 file 的文件 我想在我的函数中调用这个文件 如果您谈论的是在 Web 浏览器中运行的 javascript 那么答案是否定的 您无法访问客户端计算
  • 对变量执行 openssh 时无法捕获 stderr-perl

    我想捕获 ssh gt 捕获 到变量后主机上显示的标准错误 例如当我尝试时 use Net OpenSSH my ssh Net OpenSSH gt new host my out ssh gt capture cd home geek
  • 使用 Python 请求通过 POST 请求发送图像

    我目前正在尝试使用 Python 3 5 和 Requests 库来发送 POST 请求 此 POST 将发送一个图像文件 这是示例代码 import requests url https api address files files o
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • Blackberry 上的套接字连接比 http 更快吗?

    我正在为 Blackberry 编写一个应用程序 该应用程序最初是在标准 J2ME 中实现的 网络连接是使用完成的Connector open socket 80 代替http 现在 我已经使用这两种方法实现了连接 似乎有时 套接字方法响应
  • 如何获取类库项目中的连接字符串

    在我的 net 解决方案中 我有两个不同的项目 一个 MVC 核心 Web 应用程序项目和一个类库项目 在Web应用程序项目中 数据库连接字符串位于appsettings json文件 我想从类库项目访问该连接字符串 是否可以 如果是 怎么
  • 限制主题创建/更改

    我有一个 3 节点不安全的 kafka v0 10 2 1 集群 禁用了主题自动创建和删除功能 如下所示server properties auto create topics enable false delete topic enabl
  • 使用绑定变量动态传递表名和列名

    有没有办法使用绑定变量将列名和表名动态传递给查询 这可以通过使用简单的串联运算符来完成 但我想要一种不同的方法来实现这一目标 EDIT OPEN abc cur FOR Select column name from table name
  • 在android中添加音频到视频

    我想开发一个可以录制视频 mp4 的android应用程序 然后我的资源文件夹中有一些音频文件 mp3 我想将其添加到视频的末尾 所以最终的效果就像首先播放视频 在视频结束时会听到添加的音频 我该怎么做 合并具有不同音频编解码器的文件并不容
  • 如何制作可扩展的文本框?

    我想制作一本以给定宽度 高度开始的教科书 然后 如果用户输入的内容超过给定的空间量 文本框就会向下扩展 我该怎么做呢 我使用 CSS 吗 当用户超过允许的行数时 基本文本框仅显示滚动条 如何使文本框将行数再扩展 5 行
  • 如何将 JSON 对象解析为 TypeScript 对象

    我目前正在尝试将收到的 JSON 对象转换为具有相同属性的 TypeScript 类 但无法使其工作 我究竟做错了什么 员工阶层 export class Employee firstname string lastname string