2015-12-26 16 views
5

Come posso ottenere solo il nome dal file JSON. Anche il codice è perfettamente funzionante per ottenere i dati da "file.json", cioè questo non è certo il problema.Ottieni un solo elemento dalla matrice di oggetti in JSON

JavaScript:

var data = []; 
 
function getName() { 
 
    //what should I write here to get only name from the first object i.e. John 
 
    //with this: data[0].name I am getting error! 
 
} 
 

 
var xhttp; 
 
if(window.XMLHttpRequest) 
 
    xhttp = new XMLHttpRequest(); 
 
else 
 
    xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
 
    
 
xhttp.onreadystatechange = function() { 
 
    if(xhttp.readyState == 4) { 
 
    data = JSON.parse(xhttp.responseText); 
 
    getName(); 
 
    } 
 
} 
 

 
xhttp.open("GET","file.json",true); 
 
xhttp.send();

"file.json" - JSON:

[ 
 
    { 
 
    "name":"John", 
 
    "city":"London" 
 
    }, 
 
    { 
 
    "name":"Maria", 
 
    "city":"Rome" 
 
    } 
 
]

+0

(Invece di 'onreadystatechange' e' readyState', puoi semplicemente usare 'onload'.) – Rudie

+0

Funziona bene per me, come in, nessun errore. Qual è il tuo errore? https://jsfiddle.net/rudiedirkx/0xf62ny6/ registra l'intero oggetto dati e quindi 'data [0] .name' – Rudie

+1

Qual è l'errore? Perché stai usando una variabile globale invece di passare il valore alla funzione? –

risposta

6

passare i dati variabili tramite la funzione

var data = []; 
function getName(data) { 
    return data[0].name; 
} 

var xhttp; 
if(window.XMLHttpRequest) 
    xhttp = new XMLHttpRequest(); 
else 
    xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

xhttp.onreadystatechange = function() { 
    if(xhttp.readyState == 4) { 
    data = JSON.parse(xhttp.responseText); 
    getName(data); 
    } 
} 

xhttp.open("GET","file.json",true); 
xhttp.send(); 

Inoltre, se si desidera recuperare tutti i nomi, si può fare qualcosa di simile:

function getName(data) { 
    var names = []; 
    for (var i = 0; i < data.length; i++) { 
     names.push(data[i].name); 
    } 
    return names; 
} 

(i dati sono i dati di matrice)

+0

si dà solo il nome dell'indice –

+0

ovviamente, ma non è quello che volevi? O vuoi restituire una serie di nomi? –

+0

penso che l'autore di questa domanda stia cercando di ottenere tutto il nome nel file json non cercando di ottenere un solo nome –

4

Usa Array.prototype.map() a transfrom elementi dell'array:

data.map(function(item) { 
    return item.name 
}); 
+0

Questa funzione jQuery? –

+0

no, è puro javascript – madox2

1

la vostra funzione getName dovrebbe essere simile a questo:

function getName(){ 
    a.forEach(function(i,j){ 
    console.log(i.name); 
    }); 
} 
0

Vale la pena ricordare che i tipi di dati JSON sono mappati direttamente ai tipi di dati javascript standard. Ciò significa che non esiste un array JSON, una volta che hai una stringa javascript, ovvero array, oggetti, stringhe, numeri, ecc.

Quindi ottenere un elemento da un array JSON è solo accedere a un elemento di un array javascript standard. Questo è solitamente ottenuto dall'operatore di parentesi quadre var element = array[index].

Il codice è tuttavia rotto in più parti che non sono correlate all'accesso all'elemento dell'array.

Innanzitutto, si definisce la variabile data al livello superiore: non è necessario (in base al campione).

Quindi, lo si inizializza con un array vuoto: non ho idea del perché.

Il tuo onreadystatechange Il callback onreadystatechange è semplice quando espresso in parole: si ottiene una stringa, la si analizza come json e quindi si chiama getName fornendo il risultato. Ciò significa che il tuo getName() dovrebbe richiedere un argomento data a cui potrai accedere all'interno della funzione.

Problemi correlati