Domanda

Se ho quanto segue:

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

E ho un nome "hdrs" (ad es."Make"), come posso fare riferimento al file data istanze di array?sembra come data["Make"][0] dovrebbe funzionare... ma non è possibile ottenere il riferimento corretto

MODIFICARE

Scusate l'ambiguità..Posso scorrere hdrs per ottenere ciascun nome hdr, ma devo utilizzare ciascun valore di istanza di hdrs per trovare tutti gli elementi di dati in data (non sono sicuro che sia una spiegazione migliore).e lo avrò in una variabile t poiché è JSON (apprezzo la ri-tagging) mi piacerebbe poter fare riferimento a qualcosa del genere: t.data[hdrs[i]][j]

È stato utile?

Soluzione

Ho dovuto modificare leggermente il tuo codice:

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 );

MODIFICARE:in risposta alla tua modifica

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]] );
}           

Altri suggerimenti

Allora, così?

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

Dovrebbe funzionare, se ho capito bene...

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"

Hai la ricerca dell'array/hash all'indietro :)

Non sono sicuro di aver capito la tua domanda, ma...

Supponendo che il JSON sopra sia var obj, vuoi:

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

Se vuoi semplicemente fare riferimento al campo a cui fa riferimento la prima intestazione, sarebbe qualcosa del tipo:

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

innanzitutto, hai dimenticato le virgole finali negli elementi dell'array di dati.

prova quanto segue:

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 che l'ultima virgola non è strettamente necessaria, ma ti consente di spostare più facilmente le righe (ad esempio, se sposti o aggiungi dopo l'ultima riga e non c'era una virgola, dovresti ricordarti specificamente di aggiungere uno.penso che sia meglio avere sempre le virgole finali.)

forse prova data[0].Make

Chiudi, utilizzeresti

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

Il codice visualizzato non è sintatticamente corretto;ha bisogno di alcune virgole.Ho fatto in modo che funzionasse:

$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 quindi posso accedere ai dati come:

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

Con l'aiuto delle risposte (e dopo aver corretto i cicli interno ed esterno) sono riuscito a farlo funzionare:

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>";
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top