【问题标题】:Dynamic JSON creation using jQuery使用 jQuery 创建动态 JSON
【发布时间】:2021-12-02 04:59:53
【问题描述】:

我是 JSON 新手,并尝试了以下示例来查看结果,但它在控制台中返回一个空数组。有什么建议吗?

function createJSON() {
  var obj = [];
  var elems = $("input[class=email]");
  
  for (i = 0; i < elems.length; i += 1) {
    var id = this.getAttribute('title');
    var email = this.value;
    tmp = {
      'title': id,
      'email': email
    };
    obj.push(tmp);
  }
  
  var jsonString = JSON.stringify(obj);
  console.log(jsonString);
}

createJSON();
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【问题讨论】:

  • $("input[class=email]") 更改为$('input[class="email"]')。您需要在选择器中为属性值添加引号。而且既然是类,你可以使用$('input.email')
  • @Gil 不太准确。仅当值包含空格时,才需要在选择器中的属性值周围加上引号。在这种情况下,[class="email"][class=email] 都可以工作 - 尽管.email 的性能更高,实践也更好。
  • 已更改,但仍会在控制台 [] 中获得此输出,其为空

标签: javascript jquery json


【解决方案1】:

您的代码的问题是因为您混合了普通的 JS 和 jQuery 方法。例如,您不应该使用 for 循环遍历 jQuery 对象,并且 jQuery 对象没有 getAttribute() 方法。在这些情况下,您将分别使用 each()attr()prop()

也就是说,您可以更简单地使用map() 从包含元素集合的 jQuery 对象创建一个数组,如下所示:

function createJSON() {
  let arr = $('.email').map((i, el) => ({
    title: el.title,
    email: el.value
  })).get();
  return JSON.stringify(arr);
}

let json = createJSON();
console.log(json);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<input type="email" class="email" title="email_1" value="foo@foo.com" />
<input type="email" class="email" title="email_2" value="bar@bar.com" />

【讨论】:

  • var networkgroup_obj="GRP1"; var NetworkObjectUUID1="ABC"; var NetworkObjectUUID2="XYZ";我正在尝试为此创建一个json动态函数,但有点不清楚如何???? [{“名称”:“networkgroup_obj1”,“对象”:[{“类型”:“主机”,“id”:“NetworkObjectUUID1”},{“类型”:“主机”,“id”:“HostObjectUUID2”} }
  • 这是一个比您的问题状态复杂得多的嵌套结构。我建议您对此提出一个新问题,确保包含所有相关的 HTML 以及您要创建的输出的 accurate 示例。
  • 非常感谢,我找到了一种获取完整字符串的方法,我只是使用 php string append 函数将该修复前缀添加到 json 输出中,并且它起作用了,无论如何它不是一个非常有效的方法,但它现在解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2021-11-10
  • 2017-06-27
相关资源
最近更新 更多