如何通过JavaScript for循环创建json?

时间:2009-05-28 13:48:35

标签: javascript json

我有选择标记的数组

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

我想创建一个json对象,在JavaScript中有两个字段'uniqueIDofSelect和optionValue'。

我使用getElementsByName(“status”)并迭代它。

修改

我需要像

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

依旧......

5 个答案:

答案 0 :(得分:167)

根据我对您的请求的理解,这应该有效:

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

答案 1 :(得分: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;
}

答案 2 :(得分: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's code,但将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 :(得分:3)

如果我想从for循环生成的字符串创建JavaScript Object,那么我会使用JSON to Object方法。我将通过迭代for循环生成JSON字符串,然后使用任何流行的JavaScript框架来评估JSON到Object。

我使用过Prototype JavaScript Framework。我有两个带键和值的数组。我遍历for循环并生成有效的JSON字符串。我使用evalJSON()函数将JSON字符串转换为JavaScript对象。

这是示例代码。试试FireBug Console

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

答案 4 :(得分:0)

你的问题很难解码,但我会试着去试一试。

你说:

  

我想创建一个包含两个字段的json对象   javascript中的 uniqueIDofSelect optionValue

然后你说:

  

我需要输出

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

嗯,此示例输出没有名为 uniqueIDofSelect 的字段,只有 optionValue

无论如何,你要求的是一系列对象......

然后在对michaels的评论中回答你说:

  

它创建了json对象数组。但我只需要一个json对象。

所以你不想要一个对象数组?

那你想要什么?

请下定决心。