Arrays 订阅后如何在变量/数组中保存JSON值?
我收到的JSON文件如下所示: 文件的长度不同,但结构将始终相同Arrays 订阅后如何在变量/数组中保存JSON值?,arrays,json,angular,typescript,Arrays,Json,Angular,Typescript,我收到的JSON文件如下所示: 文件的长度不同,但结构将始终相同 {key: "string value", key: "string value", etc...} 我试图订阅以获取数据,但无论我如何尝试订阅,我都无法以任何方式存储数据。如果我只使用这个: this.service.getEntityDetails() .subscribe(data => console.log(data)); 我可以在控制台中看到: {streetAddress: "Kosterl
{key: "string value", key: "string value", etc...}
我试图订阅以获取数据,但无论我如何尝试订阅,我都无法以任何方式存储数据。如果我只使用这个:
this.service.getEntityDetails()
.subscribe(data => console.log(data));
我可以在控制台中看到:
{streetAddress: "Kosterlijand 20", postalCode: "3980", city: "Bunnik", country: "Netherlands"}
但如果我尝试其他方法,例如:
public test: any[];
public test1: any[]=[];
public test2: string[];
public test3: string[]=[];
public test4: {};
constructor(service:Service){}
this.service.getEntityDetails()
.subscribe(data => {
test=data;
test1=data;
test2=data;
test3=data;
test4=data;
console.log("test:"+test+", test1: "+test1+", test2: "+test2+", test3: "+test3);
});
}
控制台中的输出始终相同:
test:[object Object], test1: [object Object], test2: [object Object], test3: [object Object] test4[object Object]
我想让它以KeyValuePipe
的方式工作
但由于我无法以任何方式保存这些值,因此无法使用管道。有人能帮我解决这个问题吗
如果需要,我可以提供更多信息。如果要显示来自数据源的数据,应该将其存储在组件属性中。例如:
/** @file app.component.ts */
@Component({ /* ... */ })
export class AppComponent {
public test: any[];
constructor(service: Service) {
this.service
.getEntityDetails()
.subscribe(data => {
this.test = data;
console.log('My data', this.test);
});
}
}
然后可以如下所示显示:
{{test}}
所以,要解释一些事情
public someRandomData: Array<any> = [];
this.service.getEntityDetails()
.subscribe(data => {
someRandomData=data;
});
当然,您可以编写一个函数来遍历对象的键。但是,因为您只要求存储对象,所以这就足够了 您可以使用异步管道而不是在ts文件中订阅。 以@ak.leimrey和@Fateme Fazli为例
/** @file app.component.ts */
@Component({ /* ... */ })
export class AppComponent {
public test$: Observable<any[]>;
constructor(service: Service) {
this.test$ = this.service.getEntityDetails();
}
}
/**@文件app.component.ts*/
@组件({/*…*/})
导出类AppComponent{
公开测试$:可观察;
建造商(服务:服务){
this.test$=this.service.getEntityDetails();
}
}
在模板中:
<ng-container *ngIf="(test$ | async) as test">
<div *ngFor="let item of test | keyvalue">
{{item.key}}:{{item.value}}
</div>
</ng-container>
{{item.key}}:{{item.value}
@SuyashGupta他为什么要这么做?除非他使用低于Angular 5的版本,否则不需要将其映射为json格式。当然,它将始终是[object object],因为您尝试输出对象。这不是console.log与字符串协同工作的方式。您对发生的事情有点困惑。console.log(“test:”+test+“…)
首先是错误的…它应该是console.log(“test:”,test,“test1”,test1…)代码>我认为用户在一个非常基本的层面上挣扎。他正在保存值,但犯了一个基本的错误,即他没有引用包含索引或字段的对象,并且根据他构建控制台的方式认为这些对象不可读。log语句是的,我的回答可能有点太快了。。。非常感谢。不,这是一个很好的回答,并展示了如何使用keyvalue管道!问题只是“简单”而已。
/** @file app.component.ts */
@Component({ /* ... */ })
export class AppComponent {
public test$: Observable<any[]>;
constructor(service: Service) {
this.test$ = this.service.getEntityDetails();
}
}
<ng-container *ngIf="(test$ | async) as test">
<div *ngFor="let item of test | keyvalue">
{{item.key}}:{{item.value}}
</div>
</ng-container>