Arrays 订阅后如何在变量/数组中保存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

我收到的JSON文件如下所示:

文件的长度不同,但结构将始终相同

{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>