【问题标题】:How to create json by JavaScript for loop?如何通过 JavaScript for 循环创建 json?
【发布时间】:2010-10-29 14:05:51
【问题描述】:

我有 array 的选择标签。

<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只能是一个,对吧?我想你想要当前的选择,而不是所有选择的数组?

标签: javascript json


【解决方案1】:

根据我对您的要求的了解,这应该可行:

<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 对象数组。但我只需要一个 json 对象。
  • 你不必像 var jsonObj = new Array(); 这样声明数组吗?因为你的例子对我不起作用。当我更改为 new Array() 时,它就可以工作了。
  • var jsonArr = []; 创建一个新数组。 var jsonObj = {}; 创建一个新对象
  • 所以,愚蠢的问题,我知道对象数组和包含对象数组的对象之间的区别(几乎是本文中jsonArr = []jsonObj = {} 之间的区别)。我可能过于频繁,甚至可能错误地引用了一个对象,该对象包含一个对象数组,每个对象都将(可能不同的)名称/值对作为“JSON 对象”。熟悉简单的 JSON 语法(就像您在实际的 .json 文件中所拥有的那样),我知道在语法上这是不同的。那么,您是否也将对象数组也称为 JSON?
【解决方案2】:
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;
}

【讨论】:

    【解决方案3】:

    如果您想要一个 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;
         }
      }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 谢谢他帮了我很多,我使用了 PARSE.json(jsonstring) 而不是 jsonstring.evalJSON(true);
      【解决方案5】:

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

      你说:

      我想创建一个包含两个字段的 json 对象 uniqueIDofSelectoptionValue 在 javascript 中。

      然后你说:

      我需要像这样的输出

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

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

      不管怎样,你要的是对象数组...

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

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

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

      那你想要什么?

      请下定决心。

      【讨论】:

      • 第一件事:抱歉,uniqueIDofSelect == selectID(选择元素的 ID,我可以将记录的 ID 保留为选择元素 ID(用于记录更新)。我还将生成选择元素的数量通过foreach循环。实际上这个循环是我们在asp.net MVC中用于显示可枚举对象的循环。2)你是对的,我的错误是我很有趣,整个输出是一个json对象。但它实际上是对象数组。所以迈克尔的回答是完美的。感谢您指出。
      猜你喜欢
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2016-07-09
      • 2014-11-27
      • 2013-09-04
      • 2022-01-03
      相关资源
      最近更新 更多