100 votes

Comment créer un json par javascript pour une boucle ?

J'ai tableau de l'étiquette sélectionnée.

<select id='uniqueID' name="status">
      <option value="1">Present</option>
      <option value="2">Absent</option>
 </select>

et je veux créer un objet json ayant deux champs 'uniqueIDofSelect et optionValue' en javascript.

J'utilise getElementsByName("status") et je fais une itération sur celui-ci.

EDIT

J'ai besoin d'une sortie comme

[{"selectID":2,"OptionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

et ainsi de suite...

179voto

donohoe Points 6476

D'après ce que je comprends de votre demande, cela devrait fonctionner :

<script>
//  var status  = document.getElementsByID("uniqueID"); // this works too
var status  = document.getElementsByName("status")[0];
var jsonArr = [];

for (var i = 0; i < status.options.length; i++) {
    jsonArr.push({
        id: status.options[i].text,
        optionValue: status.options[i].value
    });
}
</script>

44voto

Josh Stodola Points 42410
var sels = //Here is your array of SELECTs
var json = { };

for(var i = 0, l = sels.length; i < l; i++) {
  json[sels[i].id] = sels[i].value;
}

8voto

system PAUSE Points 10051

Si vous voulez un seul objet JavaScript tel que le suivant :

{ uniqueIDofSelect: "uniqueID", optionValue: "2" }

(où l'option 2, "Absent", est la sélection actuelle) alors le code suivant devrait le produire :

  var jsObj = null;
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsObj = { uniqueIDofSelect: status.id, optionValue: options[i].value };
        break;
     }
  }

Si vous souhaitez obtenir un tableau de tous ces objets (et pas seulement celui qui a été sélectionné), utilisez l'option Le code de Michael mais remplacez status.options[i].text pour status.id .

Si vous voulez un chaîne de caractères qui contient une représentation JSON de l'objet sélectionné, utilisez ceci à la place :

  var jsonStr = "";
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsonStr = '{ '
                  + '"uniqueIDofSelect" : '
                  + '"' + status.id + '"'
                  + ", "
                  + '"optionValue" : '
                  + '"'+ options[i].value + '"'
                  + ' }';
        break;
     }
  }

4voto

Gaurang Jadia Points 987

Si je veux créer un objet JavaScript à partir d'une chaîne générée par la boucle for, j'adopterai l'approche JSON to Object. Je génère une chaîne JSON en itérant la boucle for, puis j'utilise un framework JavaScript populaire pour évaluer le JSON en objet.

J'ai utilisé Cadre JavaScript Prototype . J'ai deux tableaux avec des clés et des valeurs. J'itère à travers la boucle for et génère une chaîne JSON valide. J'utilise evalJSON() pour convertir une chaîne JSON en objet JavaScript.

Voici un exemple de code. Essayez-le sur votre Console FireBug

var key = ["color", "size", "fabric"];
var value = ["Black", "XL", "Cotton"];

var json = "{ ";
for(var i = 0; i < key.length; i++) {
    (i + 1) == key.length ? json += "\"" + key[i] + "\" : \"" + value[i] + "\"" : json += "\"" + key[i] + "\" : \"" + value[i] + "\",";
}
json += " }";
var obj = json.evalJSON(true);
console.log(obj);

1voto

Al Jey Points 380

Vous ne pouvez pas le faire efficacement avec une boucle for, il est préférable d'utiliser une fonction récursive. Voici un extrait du framework AlSpace (il utilise ses fonctions internes pour déterminer le type de l'objet reçu, mais celles-ci sont assez explicites) :

AlSpace.JSON.encode=function(o){
    if(AlSpace.isArray(o)){
        var _r=[];
        o.each(function(){_r.push(AlSpace.JSON.encode(this))});
        return '['+_r.join(',')+']'
    }else if(AlSpace.isDate(o)){
        var year=o.getFullYear(),
            month=o.getMonth()+1,
            day=o.getDate();
        if(month<10)month='0'+month;
        if(day<10)day='0'+day;
        return '"'+year+'-'+month+'-'+day+'"'
    }else if((o===true)||(o===false)){
        if(o)return 'true';
        return 'false'
    }else if(!isNaN(o))return o;
    else if(AlSpace.isString(o)){
        if((o.charAt(0)=='[')||(o.charAt(0)=='{')||(o=='null')||(o=='false')||(o=='true'))return o;
        return '"'+o+'"'
    }else if(AlSpace.isEmpty(o))return 'null';
    else if(AlSpace.isObject(o)){
        var _r=[];
        for(i in o)if(o.hasOwnProperty(i))_r.push('"'+i+'":'+AlSpace.JSON.encode(o[i]));
        return '{'+_r.join(',')+'}'
    }
    return ''
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X