将JSON强制转换为TS对象

将JSON强制转换为TS对象,json,node.js,typescript,Json,Node.js,Typescript,我有一些类似这样的json example.json { "id": 1, "name": "John Doe", "age": 23, "country": "US", "language": "en", "created_at": 1534774253, "updated_at": 1534774269 } 我有这样一个user.ts界面 user.ts interface user { id: number; nam

我有一些类似这样的json

example.json

{
    "id": 1,
    "name": "John Doe",
    "age": 23,
    "country": "US",
    "language": "en",
    "created_at": 1534774253,
    "updated_at": 1534774269
}
我有这样一个user.ts界面

user.ts

interface user {
    id: number;
    name: string;
    age: number;
    country: string
}
那么,如何将这个json转换为从这个接口实现的对象呢?我尝试了
constuserobj:user=JSON.parse(exampleJson)
但是userObj拥有json中的所有属性。我想生成一个仅具有user.ts属性的用户对象。 例如=>
JSON.stringify(userObj),输出为
{“id”:1,“name”:“John Doe”,“age”:23,“country”:“US”}


有人知道方法吗?

您可以创建一个函数,或者最好创建一个名为“valueObjects”的文件,该文件接受传入对象,然后返回所需对象。下面是我的一些代码中的一个示例:

导出常量地址=({
街道=空,
Street2=null,
城市=空,
State=null,
ZipCode=null,
国家=‘美国’,
IsVerified=null,
IsActive=true,
StudentID=null,
Description=null,
IsPrimary=null,
AddressID=null,
DateCreated=null,
DateUpdated=null
} = {}) => ({
街道,
第二街,
城市
国家,,
ZipCode,
国家,,
经核实,
我很活跃,
学生,
描述
第一,
地址ID,
创建日期,
更新日期

});Typescript接口是一种帮助向代码编辑器提供intellisense(提示)和强输入JSON的方法。它没有帮助您处理清除不需要的其他属性的功能。因此,当您执行
const-userObj:user=JSON.parse(exampleJson)
时,仍然会在
处创建类似
的属性

我认为实现所需的一种方法可能是编写一个类

class User {
  id: number;
  name: string;
  age: number;
  country: string;

  constructor(jsonString: any) {
    const userObj = JSON.parse(jsonString);

    // this part could be shorten with for loop
    this.id = userObj.id;
    this.name = userObj.name;
    this.age = userObj.age;
    this.country = userObj.country;
  }
}
以后您可以使用它:

const userObj = new User(exampleJson);

对我来说,这个可能的重复看起来不像是重复:问题是关于删除TypeScript接口中不存在的属性。这个JSON来自哪里?TS类型导入了JSON文件。@estus它是通过REST从远程服务器来的。@MattMcCutchen接受的答案是:“你不能简单地将一个简单的旧JavaScript结果…转换成一个原型JavaScript/TypeScript类实例。”+“…,你可以对一个接口进行转换(因为它纯粹是一个编译时结构)”->解析JSON,剥离无用属性,转换为
用户
(应命名为
IUser
,imho),谢谢您的回答。这似乎是正确的做法,但我想问一些问题。如果我的json有很多用户对象,我应该为它们创建新的用户对象吗?在这种情况下,我假设您的json是一个数组。您可以为所有用户创建一个用户对象。很好。只有一行非常直接:
constuserlist=(JSON.parse(exampleJson)).map(x=>newuser(x))处理此问题的另一种方法是-如果您知道要拾取或忽略的属性列表,则可以在分配给
用户对象之前,使用lodash
pick
ommit
之类的方法来拾取或忽略附加属性。