使用jQuery动态创建每个输入值的JSON


91

我遇到了一种情况,我想通过PHP以JSON格式读取一些数据,但是在理解如何构造Javascript对象以动态创建JSON格式时遇到了一些问题。

我的情况如下:

<input title="QA" type="text" class="email">
<input title="PROD" type="text" class="email">
<input title="DEV" type="text" class="email">

到目前为止,我拥有的Javascript代码会通过每个输入获取数据,但是我无法理解如何从这里开始进行处理。

var taskArray = {};

$("input[class=email]").each(function() {
  var id = $(this).attr("title");
  var email = $(this).val();

  //how to create JSON?

});

如果可能,我想获得以下输出。

[{title: QA, email: 'a@a.com'}, {title: PROD, email: 'b@b.com'},{title: DEV, email: 'c@c.com'}]

通过输入字段值获取电子邮件的位置。

Answers:


273

像这样:

function createJSON() {
    jsonObj = [];
    $("input[class=email]").each(function() {

        var id = $(this).attr("title");
        var email = $(this).val();

        item = {}
        item ["title"] = id;
        item ["email"] = email;

        jsonObj.push(item);
    });

    console.log(jsonObj);
}

说明

您正在寻找an array of objects。因此,您将创建一个空白数组。input通过使用“标题”和“电子邮件”作为键为每个对象创建一个对象。然后,将每个对象添加到数组。

如果您需要字符串,请执行

jsonString = JSON.stringify(jsonObj);

样本输出

[{"title":"QA","email":"a@b"},{"title":"PROD","email":"b@c"},{"title":"DEV","email":"c@d"}] 

为什么在这3个示例中我总是得到这个?“未捕获的ReferenceError:未定义jsonObj”
Gino

@Gino您复制粘贴或键入吗?请参阅定义jsonObj的行。
ATOzTOA 2015年

15

假设您需要JSON字符串作为输出,我认为您不能仅使用jQuery将JavaScript对象转换为JSON字符串。

根据您所针对的浏览器,可以使用该JSON.stringify函数来生成JSON字符串。

有关更多信息,请参见http://www.json.org/js.html,您还可以在其中找到本机不支持JSON对象的旧版浏览器的JSON解析器。

在您的情况下:

var array = [];
$("input[class=email]").each(function() {
    array.push({
        title: $(this).attr("title"),
        email: $(this).val()
    });
});
// then to get the JSON string
var jsonString = JSON.stringify(array);

10

也许这会有所帮助,我会尽可能地选择纯JS,因为您不会有很多JQuery函数调用,所以它可以大大提高性能。

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

Big +1采用此解决方案,被接受的答案使我在IE中
遇到

0

与上面的示例相同-如果您只是在寻找json(而不是对象数组),请使用

function getJsonDetails() {
      item = {}
      item ["token1"] = token1val;
      item ["token2"] = token1val;
      return item;
}
console.log(JSON.stringify(getJsonDetails()))

此输出将打印为(有效json)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
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.