Bagaimana cara membuat json dengan JavaScript for loop?


99

Saya memiliki berbagai tag pilih.

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

dan saya ingin membuat objek json yang memiliki dua bidang 'uniqueIDofSelect dan optionValue' di JavaScript.

Saya menggunakan getElementsByName ("status") dan saya mengulanginya.

EDIT

Saya perlu keluar seperti

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

dan seterusnya...


Saya berasumsi bahwa optionValue harus menjadi atribut 'nilai' dari setiap elemen 'opsi': 1, 2, dll. Tapi apa ID-nya? Apakah ini teksnya? "Hadir", "Absen", dll.?
sistem JEDA

Oke, jadi jika ID adalah uniqueID yang dipilih, maka hanya ada satu optionValue, bukan? Saya kira Anda menginginkan pilihan saat ini, dan bukan array dari semua pilihan?
sistem JEDA

Jawaban:


174

Dari apa yang saya pahami tentang permintaan Anda, ini seharusnya berhasil:

<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 adalah sebuah objek dan bukan sebuah larik.
Gumbo

Ini menciptakan array objek json. tapi saya hanya butuh satu objek json.
Vikas

1
Tidakkah Anda harus mendeklarasikan array seperti var jsonObj = new Array (); karena teladan Anda tidak berhasil untuk saya. Ketika saya mengubah ke Array baru (), maka itu berhasil.
Meong

18
var jsonArr = [];membuat Array baru. var jsonObj = {};membuat Objek baru
b_dubb

Jadi, pertanyaan bodoh, saya tahu perbedaan antara array objek dan objek yang berisi array objek (cukup banyak, perbedaan antara jsonArr = []dan jsonObj = {}dalam posting ini). Saya pernah, mungkin terlalu sering, dan bahkan mungkin secara keliru, merujuk ke sebuah objek yang berisi array objek yang masing-masing memegang (mungkin berbeda) pasangan nama / nilai sebagai "objek JSON". Menjadi terbiasa dengan sintaks JSON sederhana (seperti apa yang akan Anda miliki dalam .jsonfile sebenarnya ), saya tahu bahwa secara sintaksis ini berbeda. Jadi, apakah Anda juga akan merujuk ke array objek sebagai 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

Jika Anda menginginkan satu objek JavaScript seperti berikut:

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

(di mana opsi 2, "Absen", adalah pilihan saat ini) maka kode berikut akan membuatnya:

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

Jika Anda menginginkan larik dari semua objek tersebut (bukan hanya yang dipilih), gunakan kode michael tapi Swap keluar status.options[i].textuntukstatus.id .

Jika Anda menginginkan string yang berisi representasi JSON dari objek yang dipilih, gunakan ini sebagai gantinya:

  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

Jika saya ingin membuat Objek JavaScript dari string yang dihasilkan oleh for loop maka saya akan menggunakan pendekatan JSON ke Objek. Saya akan menghasilkan string JSON dengan melakukan iterasi for loop dan kemudian menggunakan Framework JavaScript populer apa pun untuk mengevaluasi JSON ke Object.

Saya telah menggunakan Prototype JavaScript Framework . Saya memiliki dua array dengan kunci dan nilai. Saya mengulang melalui for loop dan menghasilkan string JSON yang valid. Saya menggunakan fungsi evalJSON () untuk mengubah string JSON menjadi objek JavaScript.

Berikut adalah contoh kode. Uji coba di Konsol FireBug Anda

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
Terima kasih kawan, ini telah banyak membantu saya, saya telah menggunakan PARSE.json (jsonstring) daripada jsonstring.evalJSON (true);
Arnaud Bouchot

0

Pertanyaan Anda cukup sulit untuk diuraikan, tetapi saya akan mencoba menusuknya.

Kamu bilang:

Saya ingin membuat objek json yang memiliki dua bidang uniqueIDofSelectdan optionValuedalam javascript.

Dan kemudian Anda berkata:

Saya butuh keluaran seperti

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

Nah, contoh keluaran ini tidak memiliki bidang bernama uniqueIDofSelect, hanya memilikioptionValue .

Bagaimanapun, Anda meminta array objek ...

Kemudian di komentar jawaban michaels kamu ucapkan:

Ini menciptakan array objek json. tapi saya hanya butuh satu objek json.

Jadi Anda tidak menginginkan array objek?

Lalu apa yang kamu inginkan?

Tolong buat keputusanmu.


Hal pertama: maaf bahwa uniqueIDofSelect == selectID (Id elemen pilih, saya dapat menyimpan id catatan saya sebagai id elemen pilih (untuk pembaruan catatan perpose). Saya juga akan memiliki jumlah elemen pilih yang dihasilkan oleh foreach loop. Sebenarnya loop ini adalah yang kami gunakan di asp.net MVC untuk menampilkan objek yang tidak terhitung 2) Anda benar, kesalahan saya bahwa saya lucu bahwa seluruh output adalah satu objek json. Tapi sebenarnya itu adalah array objek. Dan jawaban michael sempurna. Terima kasih telah Menunjukkan.
Vikas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.