Cách tạo json bằng JavaScript cho vòng lặp?


99

Tôi có một mảng thẻ chọn.

<select id='uniqueID' name="status">
      <option value="1">Present</option>
      <option value="2">Absent</option>
 </select>

và tôi muốn tạo một đối tượng json có hai trường 'uniqueIDofSelect và optionValue' trong JavaScript.

Tôi sử dụng getElementsByName ("trạng thái") và tôi lặp lại trên đó.

BIÊN TẬP

Tôi cần đưa ra như

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

và như thế...


Tôi giả sử rằng optionValue phải là thuộc tính "value" của mỗi phần tử "option": 1, 2, v.v. Nhưng ID là gì? Nó có phải là văn bản không? "Có mặt", "Vắng mặt", v.v.?
hệ thống TẠM DỪNG

Được rồi, vì vậy nếu ID là ID duy nhất của lựa chọn, thì chỉ có thể có một Giá trị tùy chọn, phải không? Tôi cho rằng bạn muốn lựa chọn hiện tại chứ không phải một mảng của tất cả các lựa chọn?
hệ thống TẠM DỪNG

Câu trả lời:


174

Theo những gì tôi hiểu về yêu cầu của bạn, điều này sẽ hoạt động:

<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 là một đối tượng chứ không phải một mảng.
Gumbo

Nó tạo mảng đối tượng json. nhưng tôi chỉ cần một đối tượng json.
Vikas

1
Bạn không phải khai báo mảng như var jsonObj = new Array (); vì ví dụ của bạn không phù hợp với tôi. Khi tôi thay đổi thành Array () mới, thì nó hoạt động.
Meow

18
var jsonArr = [];tạo một Mảng mới. var jsonObj = {};tạo ra một đối tượng mới
b_dubb

Vì vậy, câu hỏi ngu ngốc, tôi biết sự khác biệt giữa một mảng các đối tượng và một đối tượng chứa một mảng các đối tượng (khá nhiều, sự khác biệt giữa jsonArr = []jsonObj = {}trong bài đăng này). Tôi có lẽ quá thường xuyên, và thậm chí có thể sai khi tham chiếu đến một đối tượng chứa một mảng các đối tượng mà mỗi cặp tên / giá trị (có thể khác nhau) giữ như một "đối tượng JSON". Đã quen với cú pháp JSON đơn giản (giống như những gì bạn sẽ có trong một .jsontệp thực tế ), tôi biết rằng về mặt cú pháp thì điều này khác. Vì vậy, bạn có muốn chỉ mảng đối tượng là JSON không?
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

Nếu bạn muốn một đối tượng JavaScript đơn lẻ như sau:

{ uniqueIDofSelect: "uniqueID", optionValue: "2" }

(trong đó tùy chọn 2, "Vắng mặt", là lựa chọn hiện tại) thì mã sau sẽ tạo ra nó:

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

Nếu bạn muốn một mảng tất cả các đối tượng như vậy (không chỉ đối tượng đã chọn), hãy sử dụng mã của michael nhưng hoán đổi status.options[i].textcho status.id.

Nếu bạn muốn một chuỗi có chứa biểu diễn JSON của đối tượng đã chọn, hãy sử dụng điều này để thay thế:

  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

Nếu tôi muốn tạo JavaScript Object từ chuỗi được tạo bởi vòng lặp for thì tôi sẽ tiếp cận JSON to Object. Tôi sẽ tạo chuỗi JSON bằng cách lặp lại vòng lặp for và sau đó sử dụng bất kỳ Khung JavaScript phổ biến nào để đánh giá JSON thành Đối tượng.

Tôi đã sử dụng Khung JavaScript Nguyên mẫu . Tôi có hai mảng với các khóa và giá trị. Tôi lặp lại vòng lặp for và tạo chuỗi JSON hợp lệ. Tôi sử dụng hàm evalJSON () để chuyển đổi chuỗi JSON thành đối tượng JavaScript.

Đây là mã ví dụ. Dùng thử trên Bảng điều khiển FireBug của bạn

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
Cảm ơn anh bạn, nó đã giúp tôi rất nhiều, tôi đã sử dụng PARSE.json (jsonstring) thay vì jsonstring.evalJSON (true);
Arnaud Bouchot

0

Câu hỏi của bạn khá khó để giải mã, nhưng tôi sẽ thử xem xét nó.

Bạn nói:

Tôi muốn tạo một đối tượng json có hai trường uniqueIDofSelectoptionValuetrong javascript.

Và sau đó bạn nói:

Tôi cần đầu ra như

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

Chà, đầu ra ví dụ này không có trường được đặt tên uniqueIDofSelect, nó chỉ có optionValue.

Dù sao, bạn đang yêu cầu mảng đối tượng ...

Sau đó, trong nhận xét để trả lời michaels, bạn nói:

Nó tạo mảng đối tượng json. nhưng tôi chỉ cần một đối tượng json.

Vì vậy, bạn không muốn một mảng các đối tượng?

Bạn muốn gì sau đó?

Hãy quyết tâm của bạn.


Điều đầu tiên: xin lỗi vì uniqueIDofSelect == selectID (Id của phần tử select, tôi có thể giữ id bản ghi của mình dưới dạng id phần tử chọn (cho mục đích cập nhật bản ghi). Tôi cũng sẽ có số phần tử chọn được tạo bởi vòng lặp foreach. Thực tế vòng lặp này là mà chúng tôi đang sử dụng trong asp.net MVC để hiển thị các đối tượng Enumerable.2) Bạn nói đúng, Sai lầm của tôi là tôi đã buồn cười rằng toàn bộ đầu ra là một đối tượng json. Nhưng đó là mảng đối tượng thực tế. Và câu trả lời của michael là hoàn hảo. Cảm ơn vì đã chỉ ra.
Vikas
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.