Estou tentando fazer um loop pela seguinte matriz json:
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "[email protected]"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "[email protected]"
}
E tentei o seguinte
for (var key in data) {
if (data.hasOwnProperty(key)) {
console.log(data[key].id);
}
}
Mas, por alguma razão, estou recebendo apenas a primeira parte, os valores de id 1.
Alguma ideia?
javascript
json
Alosyius
fonte
fonte
Respostas:
Seu JSON deve ficar assim:
Você pode fazer um loop sobre a matriz assim:
Ou assim (sugerido por Eric), tenha cuidado com o suporte do IE
fonte
json.forEach(function(obj) { console.log(obj.id); });
Existem alguns problemas no seu código, primeiro o seu json deve ter a seguinte aparência:
Em seguida, você pode iterar assim:
E dá resultado perfeito.
Veja o violino aqui: http://jsfiddle.net/zrSmp/
fonte
método forEach para fácil implementação.
fonte
tente isso
fonte
Desde que eu já comecei a investigar:
E essa função
Você pode chamar assim
Atualizar após o comentário do Erics
Como Eric apontou, um
for in
loop para uma matriz pode ter resultados inesperados . A questão referenciada tem uma longa discussão sobre prós e contras.Teste com for (var i ...
Mas parece que o seguinte é bastante salvo:
Embora um teste no chrome tenha o seguinte resultado
Teste com
.forEach()
Pelo menos no chrome 30 isso funciona conforme o esperado
Ligações
for in
no mdnfor in
menos ruimfonte
for ... in
laços não devem ser utilizados para matrizesfor each
.for ... in ...
é uma construção de linguagem para enumerar chaves de objeto em uma ordem arbitrária. Essa não é a construção correta para uma matriz.Está funcionando. Acabei de adicionar colchetes aos dados JSON. Os dados são:
E o loop é:
fonte
Deve ser uma matriz se você deseja iterar sobre ela. Você provavelmente está desaparecido
[
e]
.Confira este jsfiddle: http://jsfiddle.net/lpiepiora/kN7yZ/
fonte
Um pouco tarde, mas espero poder ajudar os outros: D
seu json precisa parecer algo que Niklas já disse. E então aqui vai:
se você tiver uma matriz multidimensional, este é o seu código:
fonte
Bem, tudo o que vejo é que você tem dois objetos JSON, separados por vírgula. Se os dois estivessem dentro de uma matriz (
[...]
), faria mais sentido.E, se eles estiverem dentro de uma matriz, você usaria apenas o tipo de loop padrão "for var i = 0 ...". Como é, acho que ele tentará recuperar a propriedade "id" da string "1", depois "id" de "oi" e assim por diante.
fonte
Uma solução curta usando
map
e uma função de setaE para cobrir os casos em que a propriedade
"id"
não está presente, usefilter
:fonte
oh meu ... por que todo mundo faz isso tão difícil !!?
seu snippet de dados precisa ser expandido um pouco e deve ser desta maneira para ser o json adequado. observe que eu apenas incluo o atributo "item" do nome do array
seu script java é simplesmente
fonte