Tạo JSON động với từng giá trị đầu vào bằng jquery


91

Tôi gặp một tình huống trong đó tôi muốn đọc một số dữ liệu từ định dạng JSON thông qua PHP, tuy nhiên tôi đang gặp một số vấn đề khi hiểu cách tôi nên tạo đối tượng Javascript để tạo định dạng JSON động.

Kịch bản của tôi như sau:

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

Mã Javascript mà tôi có cho đến nay đi qua mỗi đầu vào lấy dữ liệu, tuy nhiên tôi không thể hiểu cách xử lý từ đây trở đi.

var taskArray = {};

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

  //how to create JSON?

});

Tôi muốn nhận được kết quả sau nếu có thể.

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

Nơi email được lấy bởi giá trị trường đầu vào.

Câu trả lời:


274

Như thế này:

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

Giải trình

Bạn đang tìm kiếm an array of objects. Vì vậy, bạn tạo một mảng trống. Tạo một đối tượng cho từng đối tượng inputbằng cách sử dụng 'tiêu đề' và 'email' làm khóa. Sau đó, bạn thêm từng đối tượng vào mảng.

Nếu bạn cần một chuỗi, hãy làm

jsonString = JSON.stringify(jsonObj);

Đầu ra mẫu

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

Tại sao trong 3 ví dụ này, tôi luôn nhận được điều này? 'Uncaught ReferenceError: jsonObj không được xác định'
Gino

@Gino Bạn đã sao chép dán hay nhập? Xem dòng xác định jsonObj.
ATOzTOA

15

Tôi không nghĩ rằng bạn có thể biến các đối tượng JavaScript thành chuỗi JSON chỉ bằng jQuery, giả sử bạn cần chuỗi JSON làm đầu ra.

Tùy thuộc vào trình duyệt bạn đang nhắm mục tiêu, bạn có thể sử dụng JSON.stringifyhàm để tạo chuỗi JSON.

Xem http://www.json.org/js.html để biết thêm thông tin, ở đó bạn cũng có thể tìm thấy trình phân tích cú pháp JSON cho các trình duyệt cũ hơn không hỗ trợ đối tượng JSON.

Trong trường hợp của bạn:

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

Có thể điều này sẽ hữu ích, tôi muốn JS thuần túy hơn bất cứ khi nào có thể, nó cải thiện hiệu suất đáng kể vì bạn sẽ không có nhiều lệnh gọi hàm 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 đi với giải pháp này là câu trả lời được chấp nhận gây ra cho tôi một số vấn đề trong IE
Bobadevv

0

tương tự từ ví dụ trên - nếu bạn chỉ đang tìm kiếm json (không phải một mảng đối tượng), chỉ cần sử dụng

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

đầu ra này sẽ in dưới dạng (một json hợp lệ)

{ 
   "token1":"samplevalue1",
   "token2":"samplevalue2"
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.