Creazione di un JSON dinamicamente con ogni valore di input utilizzando jquery


91

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 dinamicamente il formato JSON.

Il 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 finora passa attraverso ogni input cattura i dati, tuttavia non sono 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?

});

Vorrei ottenere il seguente output, se possibile.

[{title: QA, email: 'a@a.com'}, {title: PROD, email: 'b@b.com'},{title: DEV, email: 'c@c.com'}]

Dove l'email viene acquisita dal valore del campo di input.

Risposte:


274

Come questo:

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

Stai cercando an array of objects. Quindi, crei un array vuoto. Crea un oggetto per ciascunoinput utilizzando "titolo" e "email" come chiavi. Quindi aggiungi ciascuno degli oggetti all'array.

Se hai bisogno di una stringa, allora fallo

jsonString = JSON.stringify(jsonObj);

Output di esempio

[{"title":"QA","email":"a@b"},{"title":"PROD","email":"b@c"},{"title":"DEV","email":"c@d"}] 

Perché in questi 3 esempi ottengo sempre questo? 'Errore di riferimento non rilevato: jsonObj non è definito'
Gino

@ Gino Hai copiato, incollato o digitato? Vedi la riga che definisce jsonObj.
ATOzTOA

15

Non penso che tu possa trasformare oggetti JavaScript in stringhe JSON usando solo jQuery, supponendo che tu abbia bisogno della stringa JSON come output.

A seconda dei browser a cui ti rivolgi, puoi utilizzare il JSON.stringify funzione per produrre stringhe JSON.

Vedi http://www.json.org/js.html per ulteriori informazioni, lì puoi anche trovare un parser JSON per 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);

10

Potrebbe essere d'aiuto, preferirei JS puro ove possibile, migliora drasticamente le prestazioni poiché non avrai 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);
}

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

0

lo stesso dell'esempio precedente: se stai solo cercando json (non un array di oggetti) usa

function getJsonDetails() {
      item = {}
      item ["token1"] = token1val;
      item ["token2"] = token1val;
      return item;
}
console.log(JSON.stringify(getJsonDetails()))

questo output verrà stampato come (un json valido)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.