Créer un JSON dynamiquement avec chaque valeur d'entrée à l'aide de jquery

91

J'ai eu une situation où je voudrais lire des données au format JSON via PHP, mais j'ai des problèmes pour comprendre comment je dois construire l'objet Javascript pour créer le format JSON dynamiquement.

Mon scénario est le suivant:

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

Le code Javascript que j'ai jusqu'à présent passe par chaque entrée saisit les données, je suis cependant incapable de comprendre comment traiter à partir de maintenant.

var taskArray = {};

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

  //how to create JSON?

});

Je voudrais obtenir la sortie suivante si possible.

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

Où l'e-mail est acquis par la valeur du champ de saisie.

BaconJu
la source

Réponses:

274

Comme ça:

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

Explication

Vous recherchez an array of objects. Donc, vous créez un tableau vide. Créez un objet pour chacun inputen utilisant «titre» et «e-mail» comme clés. Ensuite, vous ajoutez chacun des objets au tableau.

Si vous avez besoin d'une chaîne, faites

jsonString = JSON.stringify(jsonObj);

Exemple de sortie

[{"title":"QA","email":"a@b"},{"title":"PROD","email":"b@c"},{"title":"DEV","email":"c@d"}] 
ATOzTOA
la source
Pourquoi dans ces 3 exemples je comprends toujours cela? 'Uncaught ReferenceError: jsonObj n'est pas défini'
Gino
@Gino Avez-vous copié-collé ou tapé? Voir la ligne qui définit jsonObj.
ATOzTOA
15

Je ne pense pas que vous puissiez transformer des objets JavaScript en chaînes JSON en utilisant uniquement jQuery, en supposant que vous ayez besoin de la chaîne JSON en sortie.

Selon les navigateurs que vous ciblez, vous pouvez utiliser la JSON.stringifyfonction pour produire des chaînes JSON.

Voir http://www.json.org/js.html pour plus d'informations, vous pouvez également y trouver un analyseur JSON pour les navigateurs plus anciens qui ne prennent pas en charge l'objet JSON de manière native.

Dans ton cas:

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);
ChrisF
la source
10

Peut-être que cela aidera, je préférerais le JS pur dans la mesure du possible, cela améliore considérablement les performances car vous n'aurez pas beaucoup d'appels de fonction 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);
}
Salman
la source
Big + 1 est allé avec cette solution, la réponse acceptée m'a causé des problèmes dans IE
Bobadevv
0

idem de l'exemple ci-dessus - si vous recherchez simplement json (pas un tableau d'objets), utilisez simplement

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

cette sortie sera imprimée comme (un json valide)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
Pravin
la source