Wie erstelle ich json mit JavaScript für die Schleife?

99

Ich habe ein Array von Select-Tags.

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

und ich möchte ein JSON-Objekt mit zwei Feldern 'uniqueIDofSelect und optionValue' in JavaScript erstellen.

Ich benutze getElementsByName ("status") und iteriere darauf.

BEARBEITEN

Ich muss gerne raus

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

und so weiter...

Vikas
quelle
Ich gehe davon aus, dass optionValue das 'value'-Attribut jedes' option'-Elements sein sollte: 1, 2 usw. Aber wie lautet die ID? Ist es der Text? "Anwesend", "Abwesend" usw.?
System PAUSE
Okay, wenn ID die eindeutige ID der Auswahl ist, kann es nur einen optionValue geben, oder? Ich nehme an, Sie möchten die aktuelle Auswahl und nicht ein Array aller Auswahlen?
System PAUSE

Antworten:

173

Soweit ich Ihre Anfrage verstehe, sollte dies funktionieren:

<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>
Donohoe
quelle
41
JSON ist ein Objekt und kein Array.
Gumbo
Es wird ein JSON-Objektarray erstellt. aber ich brauche nur ein json Objekt.
Vikas
1
Müssen Sie kein Array wie var jsonObj = new Array () deklarieren? Weil dein Beispiel bei mir nicht funktioniert hat. Wenn ich zu neuem Array () wechsle, funktioniert es.
Miau
18
var jsonArr = [];erstellt ein neues Array. var jsonObj = {};erstellt ein neues Objekt
b_dubb
Also, dumme Frage, ich kenne den Unterschied zwischen einem Array von Objekten und einem Objekt, das ein Array von Objekten enthält (so ziemlich den Unterschied zwischen jsonArr = []und jsonObj = {}in diesem Beitrag). Ich habe, vielleicht zu oft und vielleicht sogar fälschlicherweise, auf ein Objekt verwiesen, das ein Array von Objekten enthält, die jeweils (möglicherweise unterschiedliche) Name / Wert-Paare als "JSON-Objekt" enthalten. Da .jsonich mit der einfachen JSON-Syntax vertraut bin (wie Sie sie in einer tatsächlichen Datei haben würden), weiß ich, dass dies syntaktisch anders ist. Würden Sie das Array von Objekten auch als JSON bezeichnen?
VoidKing
41
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;
}
Josh Stodola
quelle
8

Wenn Sie ein einzelnes JavaScript-Objekt wie das folgende möchten:

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

(wobei Option 2, "Abwesend", die aktuelle Auswahl ist), sollte der folgende Code sie erzeugen:

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

Wenn Sie ein Array all dieser Objekte (nicht nur das ausgewählte) möchten , verwenden Sie Michaels Code , tauschen Sie ihn jedoch status.options[i].textgegen aus status.id.

Wenn Sie eine Zeichenfolge wünschen , die eine JSON-Darstellung des ausgewählten Objekts enthält, verwenden Sie stattdessen Folgendes:

  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;
     }
  }
System PAUSE
quelle
3

Wenn ich ein JavaScript-Objekt aus einer Zeichenfolge erstellen möchte, die von der for-Schleife generiert wurde, würde ich den Ansatz von JSON zu Object verwenden. Ich würde eine JSON-Zeichenfolge durch Iteration der for-Schleife generieren und dann ein beliebiges gängiges JavaScript-Framework verwenden, um JSON als Objekt auszuwerten.

Ich habe Prototype JavaScript Framework verwendet . Ich habe zwei Arrays mit Schlüsseln und Werten. Ich iteriere durch die for-Schleife und generiere eine gültige JSON-Zeichenfolge. Ich verwende die Funktion evalJSON () , um eine JSON-Zeichenfolge in ein JavaScript-Objekt zu konvertieren.

Hier ist Beispielcode. Probieren Sie es auf Ihrer FireBug-Konsole aus

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);
Gaurang Jadia
quelle
1
Danke Mann, es hat mir sehr geholfen. Ich habe PARSE.json (jsonstring) anstelle von jsonstring.evalJSON (true) verwendet.
Arnaud Bouchot
0

Ihre Frage ist ziemlich schwer zu entschlüsseln, aber ich werde versuchen, sie zu versuchen.

Du sagst:

Ich möchte ein JSON-Objekt mit zwei Feldern uniqueIDofSelectund optionValuein Javascript erstellen .

Und dann sagst du:

Ich brauche Ausgabe wie

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

Nun, diese Beispielausgabe hat nicht das Feld mit dem Namen uniqueIDofSelect, sondern nur optionValue.

Wie auch immer, Sie fragen nach einer Reihe von Objekten ...

Dann sagst du im Kommentar zu michaels Antwort:

Es wird ein JSON-Objektarray erstellt. aber ich brauche nur ein json Objekt.

Sie möchten also keine Reihe von Objekten?

Was willst du dann?

Bitte entscheiden Sie sich.

Rene Saarsoo
quelle
Das erste: Entschuldigung, dass uniqueIDofSelect == selectID (ID des Auswahlelements, ich kann die ID meines Datensatzes als Auswahlelement-ID behalten (für die Aktualisierung des Datensatzes). Ich werde auch die Anzahl der Auswahlelemente haben, die von jeder Schleife generiert werden. Eigentlich ist diese Schleife die wir in asp.net MVC zum Anzeigen von Aufzählungsobjekten verwenden. 2) Sie haben Recht, mein Fehler, dass ich amüsiert habe, dass die gesamte Ausgabe ein json-Objekt ist. Aber es ist tatsächlich ein Array von Objekten. Und so ist Michaels Antwort perfekt. Vielen Dank für den Hinweis.
Vikas