Pergunta

Se eu tenho a seguinte:

{"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
}

E eu tenho um "hdrs" nome (ou seja, "Marca"), como posso referenciar os casos de matriz data? Parece que data["Make"][0] deve funcionar ... mas incapaz de obter a referência direita

Editar

Sorry for a ambiguidade .. Eu posso percorrer hdrs para obter cada nome HDR, mas eu preciso usar cada valor instância de hdrs para encontrar todos os elementos de dados em data (não tenho certeza que é melhor de uma explicação). e eu vou tê-lo em um t variável, uma vez que é JSON (apreciar a re-tagging) Eu gostaria de ser capaz de referência com algo como isto: t.data[hdrs[i]][j]

Foi útil?

Solução

eu tive que alterar seu código um pouco:

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };

        alert( x.data[0].Make );

EDIT: em resposta à sua edição

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
    alert( x.data[i][x.hdrs[Header]] );
}           

Outras dicas

Assim, como este?

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

Isso deve funcionar, se eu estou entendendo você corretamente ...

var x = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

x.data[0].Make == "Honda"
x['data'][0]['Make']  == "Honda"

Você tem sua matriz / hash de pesquisa para trás :)

Eu não tenho certeza que eu entendi sua pergunta, mas ...

Assumindo que o acima JSON é o var obj, você quer:

obj.data[0]["Make"] // == "Honda"

Se você quiser apenas para se referir ao campo referenciado pelo primeiro cabeçalho, seria algo como:

obj.data[0][obj.hdrs[0]] // == "Honda"

Primeiro, você esqueceu suas vírgulas de arrasto em seus itens de matriz de dados.

Tente o seguinte:

var obj_hash = {
    "hdrs": ["Make","Model","Year"],
    "data" : [
        {"Make":"Honda","Model":"Accord","Year":"2008"},
        {"Make":"Toyota","Model":"Corolla","Year":"2008"},
        {"Make":"Honda","Model":"Pilot","Year":"2008"},
    ]
};

var ref_data = obj_hash.data;

alert(ref_data[0].Make);

@ Kent Fredric: nota que a última vírgula não é estritamente necessário, mas permite mover mais facilmente linhas ao redor (ou seja, se você mover ou adicionar após a última linha, e ele não tinha uma vírgula, você tem que se lembrar especificamente para adicionar um. Eu acho que é melhor ter sempre vírgulas à direita.)

talvez tente dados [0] .make

Fechar, você usaria

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;

O seu código como exibido não é sintaticamente correto; ele precisa de algumas vírgulas. Eu tenho esse ao trabalho:

$foo = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"},
   {"Make":"Toyota","Model":"Corolla","Year":"2008"},
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

e então eu posso acessar dados como:

$foo["data"][0]["make"]

Com a ajuda das respostas (e depois de obter o interior e loops de fora corrigir) Eu tenho esse ao trabalho:

var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
 myTable +=    "<tr>";
 for (var j = 0; j < t.hdrs.length; j++) {
  myTable += "<td>" ;
   if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top