Come creare json da JavaScript per loop?


99

Ho un array di tag di selezione.

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

e voglio creare un oggetto json con due campi "uniqueIDofSelect e optionValue" in JavaScript.

Uso getElementsByName ("status") e ci ripeto.

MODIFICARE

Ho bisogno di mettermi come

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

e così via...


Presumo che optionValue dovrebbe essere l'attributo "value" di ogni elemento "option": 1, 2, ecc. Ma qual è l'ID? È il testo? "Presente", "Assente", ecc.?
sistema PAUSE

Ok, quindi se ID è l'ID univoco della selezione, può esserci solo un'opzioneValore, giusto? Suppongo che tu voglia la selezione corrente e non un array di tutte le selezioni?
sistema PAUSE

Risposte:


174

Da quanto ho capito della tua richiesta, dovrebbe funzionare:

<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>

41
JSON è un oggetto e non un array.
Gumbo

Crea un array di oggetti json. ma ho bisogno di un solo oggetto json.
Vikas

1
Non devi dichiarare array come var jsonObj = new Array (); perché il tuo esempio non ha funzionato per me. Quando cambio a new Array (), allora funziona.
Meow

18
var jsonArr = [];crea un nuovo array. var jsonObj = {};crea un nuovo oggetto
b_dubb

Quindi, domanda stupida, conosco la differenza tra un array di oggetti e un oggetto che contiene un array di oggetti (praticamente, la differenza tra jsonArr = []e jsonObj = {}in questo post). Forse troppo spesso, e forse anche erroneamente, ho fatto riferimento a un oggetto che contiene un array di oggetti che contengono coppie nome / valore (possibilmente diverse) come un "oggetto JSON". Avendo familiarità con la semplice sintassi JSON (come quella che avresti in un .jsonfile reale ), so che sintatticamente questo è diverso. Quindi, ti riferiresti anche alla matrice di oggetti come JSON?
VoidKing

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

8

Se desideri un singolo oggetto JavaScript come il seguente:

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

(dove l'opzione 2, "Assente", è la selezione corrente), il codice seguente dovrebbe produrla:

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

Se si desidera una matrice di tutti questi oggetti (non solo quello selezionato), l'uso del codice di Michael , ma di swap fuori status.options[i].textper status.id.

Se desideri una stringa che contenga una rappresentazione JSON dell'oggetto selezionato, utilizza invece questa:

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

3

Se voglio creare un oggetto JavaScript da una stringa generata dal ciclo for, farei un approccio da JSON a Object. Genererei una stringa JSON iterando per loop e quindi utilizzerei qualsiasi framework JavaScript popolare per valutare JSON in Object.

Ho utilizzato Prototype JavaScript Framework . Ho due array con chiavi e valori. Eseguo un ciclo for e genera una stringa JSON valida. Uso la funzione evalJSON () per convertire la stringa JSON in un oggetto JavaScript.

Ecco il codice di esempio. Prova sulla tua 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);

1
Grazie amico mi ha aiutato molto, ho usato PARSE.json (jsonstring) invece di jsonstring.evalJSON (true);
Arnaud Bouchot

0

La tua domanda è piuttosto difficile da decodificare, ma proverò a provarci.

Tu dici:

Voglio creare un oggetto json con due campi uniqueIDofSelecte optionValuein javascript.

E poi dici:

Ho bisogno di output come

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

Bene, questo output di esempio non ha il campo denominato uniqueIDofSelect, lo ha solo optionValue.

Ad ogni modo, stai chiedendo una serie di oggetti ...

Quindi nel commento a michaels rispondi dici:

Crea un array di oggetti json. ma ho bisogno di un solo oggetto json.

Quindi non vuoi una serie di oggetti?

Allora cosa vuoi?

Si prega di prendere una decisione.


Prima cosa: mi dispiace che uniqueIDofSelect == selectID (Id dell'elemento select, posso mantenere l'ID del mio record come ID elemento select (per lo scopo dell'aggiornamento del record). Avrò anche il numero di elementi select generati dal ciclo foreach. In realtà questo ciclo è che stiamo usando in asp.net MVC per la visualizzazione di oggetti enumerabili 2) Hai ragione, il mio errore è che mi divertivo che l'intero output è un oggetto json. Ma in realtà è una serie di oggetti. E quindi la risposta di Michael è perfetta. Grazie per averlo fatto notare.
Vikas
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.