JavaScript for döngüsü ile json nasıl oluşturulur?


99

Bir dizi seçme etiketim var.

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

ve JavaScript'te 'uniqueIDofSelect ve optionValue' olmak üzere iki alana sahip bir json nesnesi oluşturmak istiyorum.

GetElementsByName ("durum") kullanıyorum ve üzerinde yineliyorum.

DÜZENLE

Gibi koymaya ihtiyacım var

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

ve bunun gibi...


OptionValue'un her bir 'seçenek' öğesinin 'değer' özelliği olması gerektiğini varsayıyorum: 1, 2, vb. Ama kimlik nedir? Metin mi? "Var", "Yok" vb.
sistem

Tamam, yani ID, seçimin benzersiz kimliği ise, yalnızca bir seçenekDeğeri olabilir, değil mi? Sanırım tüm seçimlerden oluşan bir dizi değil de geçerli seçimi istiyorsunuz?
sistem

Yanıtlar:


174

İsteğinizi anladığım kadarıyla, bu işe yaramalı:

<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 bir nesnedir ve bir dizi değildir.
Gumbo

Json nesne dizisi oluşturur. ama sadece bir json nesnesine ihtiyacım var.
Vikas

1
Var jsonObj = new Array () gibi bir dizi bildirmek zorunda değilsiniz; çünkü senin örneğin benim için işe yaramadı. Yeni Array () olarak değiştirdiğimde işe yarıyor.
Miyav

18
var jsonArr = [];yeni bir Dizi oluşturur. var jsonObj = {};yeni bir Nesne oluşturur
b_dubb

Aptalca bir soru, bir dizi nesne ile bir dizi nesne içeren bir nesne arasındaki farkı biliyorum (hemen hemen, bu yazıdaki jsonArr = []ve jsonObj = {}arasındaki fark ). Belki çok sık ve hatta hatalı olarak, her biri ad / değer çiftlerini bir "JSON nesnesi" olarak tutan (muhtemelen farklı) bir dizi nesne içeren bir nesneye başvurdum. Basit JSON sözdizimine aşina .jsonolduğumdan ( gerçek bir dosyada sahip olacağınız gibi ), sözdizimsel olarak bunun farklı olduğunu biliyorum. Öyleyse, yalnızca nesneler dizisine JSON olarak da başvurur musunuz?
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

Aşağıdaki gibi tek bir JavaScript nesnesi istiyorsanız:

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

(burada seçenek 2, "Yok" geçerli seçimdir), ardından aşağıdaki kod bunu üretmelidir:

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

Bir tür tüm nesnelerin dizisi (seçilen biri değil sadece) kullanın isterseniz Michael'ın kodunu dışarı ama takas status.options[i].textiçin status.id.

Seçili nesnenin JSON temsilini içeren bir dize istiyorsanız , bunun yerine şunu kullanın:

  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

Eğer for döngüsü tarafından oluşturulan dizeden JavaScript Nesnesi oluşturmak istersem, JSON'dan Nesne yaklaşımına başvururum. Döngüyü yineleyerek JSON dizesi oluşturur ve ardından JSON'u Nesne olarak değerlendirmek için herhangi bir popüler JavaScript Framework kullanırdım.

Ben kullandım Prototip JavaScript Framework . Anahtarları ve değerleri olan iki dizim var. For döngüsünü yineliyorum ve geçerli JSON dizesi oluşturuyorum. JSON dizesini JavaScript nesnesine dönüştürmek için evalJSON () işlevini kullanıyorum.

İşte örnek kod. FireBug Konsolunuzda Deneme

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
Teşekkürler adamım bana çok yardımcı oldu, jsonstring.evalJSON (true) yerine PARSE.json (jsonstring) kullandım;
Arnaud Bouchot

0

Sorunuzun şifresini çözmek oldukça zor, ancak ona bir göz atmayı deneyeceğim.

Diyorsun:

İki alana sahip uniqueIDofSelectve optionValuejavascript'te bir json nesnesi oluşturmak istiyorum .

Ve sonra diyorsun:

Gibi çıktıya ihtiyacım var

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

Peki, bu örnek çıktıda adlandırılmış alan yok, uniqueIDofSelectsadece var optionValue.

Her neyse, bir dizi nesne istiyorsun ...

Sonra Michaels'a yapılan yorumda şöyle diyorsun:

Json nesne dizisi oluşturur. ama sadece bir json nesnesine ihtiyacım var.

Yani bir dizi nesne istemiyor musunuz?

O zaman ne istiyorsun

Lütfen kararınızı verin.


İlk şey: üzgünüm, uniqueIDofSelect == selectID (Seçili elemanın kimliği, kaydımın kimliğini seçme eleman kimliği olarak tutabilirim (kayıt güncellemesi için). Ayrıca foreach döngüsü tarafından oluşturulan seçme elemanının sayısına da sahip olacağım. Aslında bu döngü Asp.net MVC'de Numaralandırılabilir nesneleri görüntülemek için kullandığımız. 2) Haklısın, tüm çıktının bir json nesnesi olduğunu eğlendirdiğim hatam. Ama aslında nesne dizisidir. Ve bu yüzden Michael'ın cevabı mükemmel. Gösterdiğiniz için teşekkürler.
Vikas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.