解析 Typescript 中的 JSON 个对象
Parse JSON Object in Typescript
我不熟悉 Angular 和使用 spring 引导构建服务。因此,如果下面的问题很简单,请原谅。
我有以下 JSON 来自 spring 休息服务的回复。我正在尝试将此服务响应映射到 Angular material 数据 table.
但是,由于我对 Angular、Typescript 和解析 json 对象还是个新手,请问您能帮我指点一下如何将下面列出的 json 响应映射到我的界面。
JSON 回应
{
"content": [
{
"id": "1000",
"name": "R&D IN",
"location": "IN",
"costCenter": "RD-001"
}
],
"last": false,
"totalElements": 10,
"totalPages": 10,
"size": 1,
"number": 1,
"sort": [
{
"direction": "ASC",
"property": "name",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
],
"first": false,
"numberOfElements": 1
}
我需要在上面的 json 响应中映射以下两个属性 ->
内容和总记录
我在 Angular
中有以下服务代码
department.service.ts
getAllDepartments(filter: string, sortOrder: string, pageNumber: number, pageSize: number): Observable<DepartmentList>{
return this.http.get<DepartmentList>(this.API_URL + '/api/department/', {
params: new HttpParams()
.set('filter', filter)
.set('sort', 'name')
.set('page', pageNumber.toString())
.set('size', pageSize.toString())
});
}
department.component.ts
this.deptService.getAllDepartments(filter, sortDirection,pageIndex, pageSize)
.pipe(
catchError(() => of([])),
finalize(() => this.loadingSubject.next(false)))
.subscribe(
departments => {
let obj = JSON.stringify(departments);
console.log('Department List :: ', departments);
console.log(obj.content);
this.departmentSubject.next(departments.content);
this.departmentRecCount.next(departments.totalElements);
});
然而,最后两行在我的 angular 中显示错误。然而,尽管有错误,代码仍然有效
错误出现在下面两行-
this.departmentSubject.next(departments.content);
this.departmentRecCount.next(departments.totalElements);
错误消息 - 错误 TS2339:属性 'content' 在类型 'any[] | DepartmentList' 上不存在。 属性 'content' 在类型 'any[]' 上不存在。
Department.model.ts
export interface DepartmentList {
content: Department[];
totalElements: number;
}
export interface Department {
id: string;
name: string;
location: string;
costCenter: string;
}
如何解决上述问题。
如果这已经在任何其他线程中解释过,请原谅。
尝试在赋值之前输入 cast departments
。
const deptList = departments as DepartmentList;
this.departmentSubject.next(deptList.content);
this.departmentRecCount.next(deptList.totalElements);
我不熟悉 Angular 和使用 spring 引导构建服务。因此,如果下面的问题很简单,请原谅。
我有以下 JSON 来自 spring 休息服务的回复。我正在尝试将此服务响应映射到 Angular material 数据 table.
但是,由于我对 Angular、Typescript 和解析 json 对象还是个新手,请问您能帮我指点一下如何将下面列出的 json 响应映射到我的界面。
JSON 回应
{
"content": [
{
"id": "1000",
"name": "R&D IN",
"location": "IN",
"costCenter": "RD-001"
}
],
"last": false,
"totalElements": 10,
"totalPages": 10,
"size": 1,
"number": 1,
"sort": [
{
"direction": "ASC",
"property": "name",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
],
"first": false,
"numberOfElements": 1
}
我需要在上面的 json 响应中映射以下两个属性 -> 内容和总记录
我在 Angular
中有以下服务代码department.service.ts
getAllDepartments(filter: string, sortOrder: string, pageNumber: number, pageSize: number): Observable<DepartmentList>{
return this.http.get<DepartmentList>(this.API_URL + '/api/department/', {
params: new HttpParams()
.set('filter', filter)
.set('sort', 'name')
.set('page', pageNumber.toString())
.set('size', pageSize.toString())
});
}
department.component.ts
this.deptService.getAllDepartments(filter, sortDirection,pageIndex, pageSize)
.pipe(
catchError(() => of([])),
finalize(() => this.loadingSubject.next(false)))
.subscribe(
departments => {
let obj = JSON.stringify(departments);
console.log('Department List :: ', departments);
console.log(obj.content);
this.departmentSubject.next(departments.content);
this.departmentRecCount.next(departments.totalElements);
});
然而,最后两行在我的 angular 中显示错误。然而,尽管有错误,代码仍然有效
错误出现在下面两行-
this.departmentSubject.next(departments.content);
this.departmentRecCount.next(departments.totalElements);
错误消息 - 错误 TS2339:属性 'content' 在类型 'any[] | DepartmentList' 上不存在。 属性 'content' 在类型 'any[]' 上不存在。
Department.model.ts
export interface DepartmentList {
content: Department[];
totalElements: number;
}
export interface Department {
id: string;
name: string;
location: string;
costCenter: string;
}
如何解决上述问题。
如果这已经在任何其他线程中解释过,请原谅。
尝试在赋值之前输入 cast departments
。
const deptList = departments as DepartmentList;
this.departmentSubject.next(deptList.content);
this.departmentRecCount.next(deptList.totalElements);