将resin_json()转换为Array <object>

时间:2017-10-07 13:21:42

标签: json angular typescript

我有一个java webservice,用于输出具有此属性&gt;

的Json对象列表
public class Oferta {
private int id;
private String categoria;
private String descricao_oferta;
private String anunciante;
private double valor;
private boolean destaque;
private List<String> imagens;
  }

我有一个Angular4项目,我想要检索这个json并存储在一个数组中。我该怎么做?

Angular4 oferta模型:

export class Oferta {
public id: number;
public categoria: string;
public titulo: string;
public descricao_oferta: string;
public anunciante: string;
public valor: number;
public destaque: boolean;
public imagens: Array<Object>;  
}

我可以检索json对象列表的方法(工作正常,当我在console.log(getData)时,我收到了json对象的列表。:

   public getData(): Promise<Oferta[]>{

     this.ofertas = this.http.get(this.apiURL)
    .map((res: Response) => <Oferta[]>res.json())                        << ERROR WHEN CASTING

    return new Promise((resolve,reject)=>{
        let deu_certo = true
        if(deu_certo){
            setTimeout(() => resolve(this.ofertas),3000);

        }
       else{
           reject({codigo_erro: 404,mensagem_erro: 'Servidor nao  encontrado'})
       }
        //console.log('passou aqui')


    })
    .then(( ofertas: Oferta[]) => {
        console.log('segundo then')
        return new Promise((resolve2,reject2) => {
            setTimeout(() => {resolve2(ofertas )},3000)
        })

    })
    .then((ofertas: Oferta[]) => {
        console.log('terceiro then executado apos 3 sec , aguardando outra promisse ser resolvida')
        return ofertas;

    })
}

现在我该如何将其转换为数组?已经尝试过this.oferta [] = res.json();不要让我。

/////////////这就是我在home.component

的召唤

ngOnInit(){     this.ofertas = this.ofertasService.getData()

this.ofertasService.getOfertas2()
.then(
  ( ofertas: Oferta[] ) => { this.ofertas = ofertas
    console.log('a funçao resolve() foi resolvida depois de 3 segundos')
  })
  .catch((param: any) => {
    console.log(param)
  })    
  }

2 个答案:

答案 0 :(得分:2)

如果类属性名称与json属性匹配,则只需要对数据进行类型转换。

getData():Promise<Oferta[]>{
    return this.http.get(this.apiURL)
    .map((res: Response) => <Oferta []>res.json()).toPromise()
}

您必须从rxjs

导入toPromise功能

答案 1 :(得分:0)

更新:我能够用这个做到这一点:
                 this.http.get(this.actionUrl)                  .map(res =&gt; res.json())                  。订阅(                   data =&gt; {                     this.ofertas =数据;                           },                    err =&gt;                   console.log(&#39; cant get ofertas&#39;),                   ()=&gt;的console.log(&#39; FOI&#39)

但是只能直接在我的Home.component.ts上,尝试使用我的Oferta.service.ts中的方法getData,我不能在oferta.service中使用http,所以不确定如何在不同的情况下执行此操作除了组件之外的课程。