如何通过JavaScript创建JSON以进行循环?


99

我有选择标签的数组

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

等等...


我假设optionValue应该是每个“ option”元素的“ value”属性:1、2等。但是ID是什么?是文字吗?“当前”,“不存在”等?
系统暂停

好的,如果ID是select的uniqueID,那么只能有一个optionValue,对吗?我想您需要当前选择,而不是所有选择的数组?
系统暂停

Answers:


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是一个对象,而不是数组。
浓汤

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

1
您不必像var一样声明数组jsonObj = new Array(); 因为你的榜样对我没有用。当我更改为新的Array()时,它将起作用。
喵喵

18
var jsonArr = [];创建一个新的数组。 var jsonObj = {};创建一个新对象
b_dubb 2012年

所以,愚蠢的问题,我知道对象数组和包含对象数组的对象之间的区别(相当多,本文中jsonArr = []和之间的区别jsonObj = {})。我可能经常,甚至错误地将包含一个对象数组的对象称为“ JSON对象”,每个对象包含(可能不同的)名称/值对。熟悉简单的JSON语法(如实际.json文件中的语法),我知道从语法上讲这是不同的。因此,您是否也将对象数组也称为JSON?
VoidKing

42
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“ Absent”是当前选择),则以下代码应产生它:

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

3

如果我想从for循环生成的字符串中创建JavaScript对象,则可以使用JSON到Object的方法。我将通过迭代循环来生成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);

1
谢谢,它对我有很大帮助,我使用了PARSE.json(jsonstring)而不是jsonstring.evalJSON(true);。
Arnaud Bouchot '16年

0

您的问题很难解码,但我会尝试解决。

你说:

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

然后你说:

我需要像这样的输出

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

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

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

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

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

因此,您不想要对象数组吗?

那你想要什么?

请下定决心。


第一件事:遗憾的是uniqueIDofSelect == selectID(选择元素的ID,我可以将记录的ID保留为选择元素ID(用于更新记录)。我还将拥有由foreach循环生成的选择元素的数量。实际上,这个循环是我们在asp.net MVC中使用它来显示Enumerable对象2)你是对的,我的错误是我在逗弄整个输出是一个json对象。但这实际上是对象数组。因此,迈克尔的答案很完美。感谢您指出。
维卡斯2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.