Как создать JSON с помощью JavaScript для цикла? - PullRequest
95 голосов
/ 28 мая 2009

У меня есть массив тега выбора.

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

и я хочу создать объект json с двумя полями «uniqueIDofSelect» и «optionValue» в JavaScript.

Я использую getElementsByName ("status") и перебираю его.

EDIT

Мне нужно положить как

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

и так далее ...

Ответы [ 5 ]

167 голосов
/ 28 мая 2009

Из того, что я понимаю по вашему запросу, это должно работать:

<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 голосов
/ 28 мая 2009
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 голосов
/ 28 мая 2009

Если вы хотите один объект 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;
     }
  }

Если вы хотите получить массив всех таких объектов (не только выбранный), используйте код Майкла , но поменяйте местами 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 голосов
/ 25 августа 2011

Если я хочу создать объект JavaScript из строки, сгенерированной циклом for, я бы применил подход JSON к объекту. Я бы сгенерировал строку JSON, выполнив итерацию цикла loop, а затем использовал любую популярную платформу JavaScript для оценки JSON в Object.

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

Вот пример кода. Попробуйте на вашей Консоль 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);
0 голосов
/ 30 мая 2009

Ваш вопрос довольно сложно расшифровать, но я постараюсь сделать ответ.

Вы говорите:

Я хочу создать объект json, имеющий два поля uniqueIDofSelect и optionValue в JavaScript.

А потом вы говорите:

Мне нужен вывод, как

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

Ну, этот пример выходных данных не имеет поля с именем uniqueIDofSelect, он имеет только optionValue.

В любом случае, вы запрашиваете массив объектов ...

Тогда в комментарии к ответу Майклз вы говорите:

Создает массив объектов json. но мне нужен только один объект JSON.

То есть вам не нужен массив объектов?

Что ты тогда хочешь?

Пожалуйста, примите решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...