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

问题描述 投票:0回答:6

我有选择标签的数组

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

我想在 JavaScript 中创建一个具有两个字段“uniqueIDofSelect 和 optionValue”的 json 对象。

我使用 getElementsByName("status") 并对其进行迭代。

编辑

我需要像这样

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

等等...

javascript json
6个回答
183
投票

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

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

45
投票
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
投票

如果您想要单个 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 表示形式的 string,请改用它:

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

4
投票

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

我使用了Prototype 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
投票

你的问题很难解码,但我会尝试一下。

你说:

我想创建一个有两个字段的 json 对象 JavaScript 中的

uniqueIDofSelect
optionValue

然后你说:

我需要类似的输出

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

嗯,这个示例输出没有名为

uniqueIDofSelect
的字段,它只有
optionValue

无论如何,你要求的是对象数组......

然后在对迈克尔回答的评论中你说:

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

所以你不需要对象数组?

那你想要什么?

请你下定决心。


0
投票
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;
}

嗨,我正在尝试在我自己的项目中使用这个,但是 json 不会返回 sels 的值。它返回空。我正在使用的代码可以毫无问题地将我自己的 json 写入屏幕,但是当我厌倦使用此代码创建新的 json 时,它根本不起作用

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.