我从后端收到一个包含SELECT
'[', lpad(ABS(Balance),18,0) ,']',
'[' || lpad(ABS(Balance),18,0) || ']'
FROM Accounts
对象数组的json:
这是客户端类:
client
我正在寻找将收到的export class Client {
private id:number;
private firstname: String;
private lastname: String;
private phone:String;
private address:String;
private country:String;
private Security_No:String;
}
投放到json
的最简单方法。
目前我将json存储在属性中,稍后我将其抛出并提取数据。但似乎应该有一种更简单的方法吗?
Clients[]
答案 0 :(得分:4)
您无法将json数据(即js对象)转换为类 好吧,你可以,但是你没有真正拥有类的实例,而是满足类接口的对象。
简单示例:
class Point {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
let a = {
x: 5,
y: 5
} as Point;
console.log(a); // Object {x: 5, y: 5}
let b = new Point(5, 5);
console.log(b); // Point {x: 5, y: 5}
编译器不会抱怨a
不是Point
的实例,因为它满足Point
接口,所以这些是有效的:
function log(point: Point) {
console.log(`(${ point.x }, ${ point.y })`);
}
log(a); // fine
log(b); // fine
它有效this way because:
TypeScript的核心原则之一是类型检查的重点 价值观的形状。这有时被称为“鸭子打字”或 “结构子类型”。在TypeScript中,接口充当了角色 命名这些类型,是定义合同的有效方式 在您的代码中以及与您之外的代码签订的合同 项目
至于您的具体问题,您可以将您的类用作界面或只是将其变为界面:
interface Client {
id:number;
firstname: String;
lastname: String;
phone:String;
address:String;
country:String;
Security_No:String;
}
然后(在两种情况下):
this._httpClientService.getAllClients().subscribe((res) => {
this.data = res.json() as Client[]
}));
但是如果你要使用你的类(而不是界面)那么属性必须是公共的而不是私有的。
如果您希望将您的课程用作课程而不是界面,则无需投射,您需要:
this._httpClientService.getAllClients().subscribe((res) => {
this.data = res.json().map(item => new Client(data));
}));
你需要有Client
的构造函数,它接受接口并将值赋给其成员。
答案 1 :(得分:2)
在我的应用程序中,我有一个用户对象,它有许多字段和许多数组来存储数据,因此它是一个复杂的对象。在map运算符中,我可以将response.json()
强制转换为该值:
return this.http.get(this.constants.userUrl + userId, { headers: headers })
.map((response: Response) => <User>response.json())
.catch(this.handleError);
}
订阅的处理方式相同: