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

IT技术 javascript json
2021-03-03 11:07:17

我有一系列选择标签。

<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"}]

等等...

5个回答

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

<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>
它创建 json 对象数组。但我只需要一个 json 对象。
2021-04-24 11:07:17
难道你不必像 var jsonObj = new Array(); 那样声明数组吗?因为你的例子对我不起作用。当我更改为 new Array() 时,它就起作用了。
2021-04-29 11:07:17
var jsonArr = [];创建一个新数组。 var jsonObj = {};创建一个新对象
2021-05-10 11:07:17
JSON 是一个对象而不是一个数组。
2021-05-16 11:07:17
所以,愚蠢的问题,我知道对象数组和包含对象数组的对象之间的区别(几乎就是这篇文章中jsonArr = []之间的区别jsonObj = {})。我可能经常甚至错误地将包含一组对象的对象称为“JSON 对象”,每个对象都保存(可能不同的)名称/值对。熟悉简单的 JSON 语法(就像你在实际.json文件中的语法),我知道这在语法上是不同的。那么,您是否也将对象数组也称为 JSON?
2021-05-16 11:07:17
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;
}

如果你想要一个像下面这样的 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].textstatus.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;
     }
  }

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

我使用过原型 JavaScript 框架我有两个带有键和值的数组。我遍历 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);
谢谢伙计,它对我帮助很大,我使用了 PARSE.json(jsonstring) 而不是 jsonstring.evalJSON(true);
2021-05-20 11:07:17

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

你说:

我想创建一个有两个字段的JSON对象 uniqueIDofSelect,并optionValue在JavaScript。

然后你说:

我需要像这样的输出

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

好吧,这个示例输出没有名为 的字段uniqueIDofSelect,它只有optionValue.

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

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

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

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

那你想要什么?

请下定决心。

第一件事:抱歉,uniqueIDofSelect == selectID(选择元素的 ID,我可以将我的记录 ID 保留为选择元素 ID(用于记录更新)。我还将拥有由 foreach 循环生成的选择元素的数量。实际上这个循环是我们在 asp.net MVC 中使用它来显示 Enumerable 对象。2)你是对的,我的错误是我对整个输出是一个 json 对象感到很有趣。但它实际上是对象数组。所以迈克尔的回答是完美的。感谢您指出。
2021-05-20 11:07:17