4
respostas

Problema com JSON.stringify(array)

Olá, sou iniciante em JavaScript e estou com seguinte código Javascript que faz uma chamada rest a um WebServer para passar algumas informações para o meu backend:

var infoSwitches = [];
        $.ajax({
            url: "http://192.168.25.5:8080/stats/flow/1",
            type: 'Get',
            dataType: "json"
        }).then(function (data) {
            $(data[sw_dpid]).each(function () {
                if (this.match.nw_dstB !== undefined) {
                    var info =
                        {
                            dpid: sw_dpid.valueOf(),
                            portaOgm: this.match.in_port,
                            portaDestino: parseInt(this.actions[0].substring(7)),
                            ipOgm: this.match.nw_src,
                            ipDestino: this.match.nw_dst,
                            contagemBytes: this.byte_count,
                            contagemPacotes: this.packet_count
                        };
                    infoSwitches.push(info);
                     }
            });
            });
    });
console.log(infoSwitches)
console.log(JSON.stringify(infoSwitches));

O retorno da chamada rest é um array com diversas informações, a maioria não sendo útil. Por esta razão o meu código itera por esse array pegando apenas o que é útil. O problema é que ao dar o segundo console.log o retorno é um vetor vazio []. Alguma ideia do que fazer?

Obrigado.

4 respostas

Olá Pedro,

No primeiro console.log qual é o resultado?

Boa noite Luiz Fernando, aparece um [] com uma seta. Quando expando aparece o que segue abaixo.

0:{dpid: 1, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}
1:{dpid: 1, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
2:{dpid: 1, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}
3:{dpid: 1, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
4:{dpid: 2, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
5:{dpid: 2, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}
6:{dpid: 2, portaDestino: 3, contagemBytes: 686, contagemPacotes: 7, match: {…}}
7:{dpid: 2, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}
8:{dpid: 2, portaDestino: 3, contagemBytes: 686, contagemPacotes: 7, match: {…}}
9:{dpid: 2, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
10:{dpid: 3, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
11:{dpid: 3, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}
12:{dpid: 3, portaDestino: 1, contagemBytes: 686, contagemPacotes: 7, match: {…}}
13:{dpid: 3, portaDestino: 2, contagemBytes: 686, contagemPacotes: 7, match: {…}}

Os matchs também possuem conteúdo. Segue o exemplo do primeiro match:

match:
ipDestino:"10.0.0.1"
ipOgm:"10.0.0.2"
portaOgm:2

Já agradeço de antemão qualquer ajuda.

Fala Pedro,

Então, não vejo muito erro no seu código, pode ser que esse objeto que esteja retornando não esteja completo, com algum erro, fiz neste link um exemplo mais ou menos do que seria o seu caso, note que no JS o objeto precisa ter , no final de cada linha (menos no final da linha 13), foi o que eu vi de diferente e que pode estar causando o erro.

Luiz, mas o método .push faz com que o array preenchido tenha os elementos separados entre vírgulas? Se não, como eu posso preencher esse array de maneira dinâmica? Algo importante de se ressaltar é que de maneira geral, o retorno dessa chamda rest será bem maior que neste caso. Obrigado pela prestatividade