将JSON强制转换为TS对象
我有一些类似这样的json example.json将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
{
"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))代码>处理此问题的另一种方法是-如果您知道要拾取或忽略的属性列表,则可以在分配给用户对象之前,使用lodashpick
或ommit
之类的方法来拾取或忽略附加属性。