6
respostas

Construir objeto em JavaScript a partir de json

Bom dia, amigos! Alguém pode me ajudar? Estou recebendo uma lista de objetos do back-end em Java e preciso tratá-la no front em JavaScript. Pretendo criar uma outra lista de objetos do tipo Operacao, mas não estou conseguindo. Estou tentando fazer o seguinte:

LISTA JSON {"operacao":{"numero":"333", "valor":"1.252,52", "fund":{"nome":"Fundo 1", "codigo":"123"}}.

Recebendo o json do back (response.data)

let $scope.listaOperacoes = [];

response.data.forEach((item) => {$scope.listaOperacoes.push(new Operacao(item))} // ERRO undefined.

class Operacao {
    constructor(json){
        if(json != undefined) {
            this.numero = json.numero;
             this.valor = json.valor;
            this.nome = json.nome;   // nome é um atributo da classe Fundo.
            this.codigo = json.codigo;   // código é um atributo da classe Fundo.

        }

    }

}
class Fund {
    constructor(json){
        if(json != undefined) {
            this.nome = json.nome;
             this.codigo = json.codigo;
        }
    }

}

Por que não consigo criar um objeto Operação? Como faço para referenciar os dados do json nome e código como sendo do tipo Fund?

6 respostas

Corrigindo:LISTA JSON

json = [{"operacao":{"numero":"333", "valor":"1.252,52", "fund":{"nome":"Fundo 1", "codigo":"123"}}}];

Consegui resolver: Alterando a classe Operação:

class Operacao {
    constructor(json){
        if(json != undefined) {
            this.numero = json.numero;
             this.valor = json.valor;
            this.nome = json.fund.nome; 
            this.codigo = json.fund.codigo; 

        }

    }

}

O json também precisa ser alterado para:

json = [{"numero":"333", "valor":"1.252,52", "fund":{"nome":"Fundo 1", "codigo":"123"}}];

{
  "operacao": {
    "numero": "333",
    "valor": "1.252,52",
    "fund": {
      "nome": "Fundo 1",
      "codigo": "123"
    }
  }
}

Observando seu JSON, você não pode fazer json.numero pois ele retorna um objeto com a [key] - operacao . Acredito que o correto seria: json.operacao.numero


{
  "numero": "333",
  "valor": "1.252,52",
  "fund": {
    "nome": "Fundo 1",
    "codigo": "123"
  }
}

Desta maneira seria possível fazer json.numero.

Valeu, Mathews! Só pra ficar mais claro pra mim, ainda ficou uma dúvida: Considerando a sua sugestão, meu json, necessariamente, será composto por duas keys, que são 'Operação' e 'Fund', cujos valores poderei iterar para construir meus objetos, no caso o objeto Operação que tem dois atributos do tipo Fund. Como preciso percorrer o json para construir meu objeto Operação, acredito que o ideal seria recebê-lo como um array de objetos. Estou certo?

[{
  "operacao": {
    "numero": "333",
    "valor": "1.252,52",
    "fund": {
      "nome": "Fundo 1",
      "codigo": "123"
    }
  }
}]

Cara, depende do que você irá fazer com o JSON. Você precisa tratar seu JSON como um Array ou Objeto?

Arrays em JSON são usados para organizar uma coleção de itens, exemplo:

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  }
]

Perceba que são dois objetos diferentes.


Se você estiver retornando apenas um resultado em JSON, não tem nenhum problema em fazer desta maneira:

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

Você está retornando apenas um Objeto que possui outro Objeto dentro, com isto não vejo motivo de envolve-lo em um Array, contudo, nada impede de você fazer isto :)

Boa noite, Mathews!

O json conterá vários objetos (Operação), por isso que eu achei que um array seria a melhor forma de percorrê-los.

Obrigado pela ajuda. Está sendo bastante esclarecedor pra mim. Valeu!