2013-02-21 9 views
62

Ho una situazione in cui vorrei leggere alcuni dati da un formato JSON tramite PHP, tuttavia ho alcuni problemi a capire come dovrei costruire l'oggetto Javascript per creare il JSON formattare dinamicamente.Creazione di un JSON dinamicamente con ciascun valore di input usando jquery

mio scenario è il seguente:

<input title="QA" type="text" class="email"> 
<input title="PROD" type="text" class="email"> 
<input title="DEV" type="text" class="email"> 

Il codice Javascript che ho passa finora per ogni ingresso afferra i dati, sono però in grado di capire come elaborare da qui in poi.

var taskArray = {}; 

$("input[class=email]").each(function() { 
    var id = $(this).attr("title"); 
    var email = $(this).val(); 

    //how to create JSON? 

}); 

Mi piacerebbe ottenere il seguente output, se possibile.

[{title: QA, email: '[email protected]'}, {title: PROD, email: '[email protected]'},{title: DEV, email: '[email protected]'}] 

Dove l'e-mail viene acquisita dal valore del campo di input.

Qualsiasi luce diffusa su questa situazione sarà molto apprezzata!

risposta

196

Ti piace questa:

function createJSON() { 
    jsonObj = []; 
    $("input[class=email]").each(function() { 

     var id = $(this).attr("title"); 
     var email = $(this).val(); 

     item = {} 
     item ["title"] = id; 
     item ["email"] = email; 

     jsonObj.push(item); 
    }); 

    console.log(jsonObj); 
} 

Spiegazione

Siete alla ricerca di an array of objects. Quindi, crei una matrice vuota. Crea un oggetto per ogni input usando "titolo" e "email" come chiavi. Quindi aggiungi ciascuno degli oggetti all'array.

Se avete bisogno di una stringa, poi fare

jsonString = JSON.stringify(jsonObj); 

Output di esempio

[{"title":"QA","email":"[email protected]"},{"title":"PROD","email":"[email protected]"},{"title":"DEV","email":"[email protected]"}] 
+0

Grazie mille. – BaconJuice

+0

Perché in questi 3 esempi ottengo sempre questo? 'Uncaught ReferenceError: jsonObj non è definito' – Gino

+0

@Gino Hai copiato incollare o digitare? Vedi la linea che definisce jsonObj. – ATOzTOA

8

Potrebbe essere utile, preferirei JS puro laddove possibile, migliora drasticamente le prestazioni poiché non si avranno molte chiamate di funzione JQuery.

var obj = []; 
var elems = $("input[class=email]"); 

for (i = 0; i < elems.length; i += 1) { 
    var id = this.getAttribute('title'); 
    var email = this.value; 
    tmp = { 
     'title': id, 
     'email': email 
    }; 

    obj.push(tmp); 
} 
+0

Big + 1 è andato con questa soluzione la risposta accettata mi ha causato alcuni problemi in IE – Bobadevv

9

Non credo che si può trasformare oggetti JavaScript in stringhe JSON utilizzando solo jQuery, supponendo che è necessario la stringa JSON come output.

A seconda dei browser scelti come target, è possibile utilizzare la funzione JSON.stringify per produrre stringhe JSON.

Vedere http://www.json.org/js.html per ulteriori informazioni, è inoltre possibile trovare un parser JSON per i browser meno recenti che non supportano l'oggetto JSON in modo nativo.

Nel tuo caso:

var array = []; 
$("input[class=email]").each(function() { 
    array.push({ 
     title: $(this).attr("title"), 
     email: $(this).val() 
    }); 
}); 
// then to get the JSON string 
var jsonString = JSON.stringify(array); 
Problemi correlati