Як створити json за допомогою JavaScript для циклу?


99

У мене є масив тегу select.

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

і я хочу створити об’єкт json з двома полями "uniqueIDofSelect and optionValue" в JavaScript.

Я використовую getElementsByName ("статус") і повторюю його.

EDIT

Мені потрібно поставити як

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

і так далі...


Я припускаю, що optionValue має бути атрибутом "value" кожного елемента "option": 1, 2 тощо. Але що таке ідентифікатор? Це текст? "Присутні", "Відсутні" тощо?
система ПАУЗА

Гаразд, так що якщо ID - це унікальний ідентифікатор вибору, то може бути лише одна опціяValue, правда? Припускаю, вам потрібен поточний вибір, а не масив усіх виділень?
система ПАУЗА

Відповіді:


174

Наскільки я розумію ваш запит, це має спрацювати:

<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 - це об'єкт, а не масив.
Gumbo

Він створює масив об'єктів json. але мені потрібен лише один об'єкт json.
Вікас

1
Чи не потрібно оголошувати масив як var jsonObj = new Array (); Тому що твій приклад не працював для мене. Коли я переходжу на новий масив (), він працює.
Мяу

18
var jsonArr = [];створює новий масив. var jsonObj = {};створює новий Об’єкт
b_dubb

Отже, глупе запитання, я знаю різницю між масивом об’єктів та об’єктом, що містить масив об’єктів (в значній мірі, різниця між jsonArr = []і jsonObj = {}в цій публікації). Я, можливо, занадто часто, а може навіть помилково, називав об'єкт, що містить масив об'єктів, кожна з яких містить (можливо різні) пари ім'я / значення, як "об'єкт JSON". Будучи знайомим з простим синтаксисом JSON (як, наприклад, те, що ви мали б у фактичному .jsonфайлі), я знаю, що синтаксично це інше. Отже, чи будете ви називати лише масив об'єктів як JSON?
VoidKing


8

Якщо вам потрібен один об’єкт JavaScript, такий як:

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

(де варіант 2 "Відсутній" є поточним виділенням), наступний код повинен створювати його:

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

Якщо ви хочете масив усіх таких об'єктів (не тільки вибраного), використовуйте код michael, але замініть status.options[i].textнаstatus.id .

Якщо ви хочете рядок, що містить JSON-зображення обраного об'єкта, використовуйте це замість цього:

  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

Якщо я хочу створити JavaScript-об'єкт із рядка, згенерованого циклом for, тоді я б підходив до JSON-об'єкта. Я генерував би рядок JSON шляхом ітерації циклу for, а потім використовував будь-який популярний JavaScript Framework для оцінки JSON для Object.

Я використовував прототип JavaScript Framework . У мене є два масиви з ключами та значеннями. Я повторюю цикл для циклу і генерую дійсну рядок JSON. Я використовую функцію evalJSON () для перетворення рядка JSON в об’єкт JavaScript.

Ось приклад коду. Tryout на вашому 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
Спасибі людина, вона мені дуже допомогла, я використав PARSE.json (jsonstring) замість jsonstring.evalJSON (правда);
Арно Бушо

0

Ваше запитання досить важко розшифрувати, але я спробую зробити його.

Ти кажеш:

Я хочу створити об’єкт json з двома полями uniqueIDofSelectта optionValueв JavaScript.

А потім ви кажете:

Мені потрібен вихід, як

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

Ну, цей вихідний приклад не має імені поля uniqueIDofSelect, він лише є optionValue.

У будь-якому випадку, ви просите масив об'єктів ...

Тоді у коментарі до Майкла відповідаєте:

Він створює масив об'єктів json. але мені потрібен лише один json-об’єкт.

Отже, ви не хочете масив об’єктів?

Що ти тоді хочеш?

Будь ласка, зробіть свою думку.


Перше: вибачте, що uniqueIDofSelect == selectID (Ідентифікатор елемента вибору, я можу зберегти ідентифікатор мого запису як ідентифікатор елемента вибору (для оновлення запису). Я також матиму кількість елементів вибору, згенерованих циклом foreach. Насправді цей цикл який ми використовуємо в asp.net MVC для відображення незліченних об'єктів 2) Ви маєте рацію, моя помилка, що мені було забавно, що весь вивід - це один json-об'єкт. Але це фактично масив об'єкта. І тому відповідь Майкла досконала. Дякуємо за вказівку.
Вікас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.