JavaScript for 루프로 json을 만드는 방법은 무엇입니까?


99

내가 가진 배열 을 선택 태그를.

<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는 무엇입니까? 텍스트입니까? "출석", "결석"등?
시스템 PAUSE

좋아요, 그래서 ID가 select의 uniqueID라면 optionValue는 하나만있을 수 있습니다. 맞죠? 모든 선택의 배열이 아니라 현재 선택을 원한다고 가정합니까?
시스템 PAUSE

답변:


174

귀하의 요청에 대해 이해 한 바에 따르면 다음과 같이 작동합니다.

<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은 배열이 아니라 객체입니다.
Gumbo

json 객체 배열을 생성합니다. 하지만 하나의 json 객체 만 필요합니다.
Vikas

1
var jsonObj = new Array ();와 같이 배열을 선언 할 필요가 없습니다. 당신의 모범이 나를 위해 작동하지 않았 으니까. new Array ()로 변경하면 작동합니다.
Meow 2011

18
var jsonArr = [];새 배열을 만듭니다. var jsonObj = {};새 개체를 생성합니다
b_dubb 2012

그래서 바보 같은 질문, 나는 객체의 배열과 객체의 배열 (사이에 거의 차이가 들어있는 개체 사이의 차이점을 알고 jsonArr = []jsonObj = {}이 게시물을). 나는 아마도 너무 자주, 어쩌면 잘못해서도 각각이 (아마도 다른) 이름 / 값 쌍을 "JSON 객체"로 보유하는 객체 배열을 포함하는 객체를 언급했습니다. 간단한 JSON 구문 (실제 .json파일 에있는 것과 같은)에 익숙하기 때문에 구문 적으로 이것이 다르다는 것을 알고 있습니다. 그렇다면 객체의 배열 만 JSON이라고 부르시겠습니까?
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

다음과 같은 단일 JavaScript 객체를 원하는 경우 :

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

(여기서 옵션 2, "Absent"는 현재 선택입니다) 다음 코드가이를 생성해야합니다.

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

당신은 이러한 모든 객체의 배열 (선택된 하나뿐만 아니라) 사용하려는 경우 마이클의 코드 밖으로하지만 스왑 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;
     }
  }

3

for 루프에 의해 생성 된 문자열에서 JavaScript Object를 생성하려면 JSON to Object 접근 방식을 사용합니다. for 루프를 반복하여 JSON 문자열을 생성 한 다음 인기있는 JavaScript 프레임 워크를 사용하여 JSON을 Object로 평가합니다.

내가 사용한 프로토 타입 자바 스크립트 프레임 워크 . 키와 값이있는 두 개의 배열이 있습니다. for 루프를 반복하고 유효한 JSON 문자열을 생성합니다. evalJSON () 함수를 사용 하여 JSON 문자열을 JavaScript 개체로 변환합니다.

다음은 예제 코드입니다. FireBug 콘솔 에서 사용해보기

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
감사합니다. 많은 도움이되었습니다. jsonstring.evalJSON (true) 대신 PARSE.json (jsonstring)을 사용했습니다.
Arnaud Bouchot

0

귀하의 질문은 해독하기가 매우 어렵지만 찔러 보겠습니다.

당신은 말한다 :

두 개의 필드 uniqueIDofSelectoptionValue자바 스크립트 가있는 json 객체를 만들고 싶습니다 .

그리고 다음과 같이 말합니다.

다음과 같은 출력이 필요합니다.

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

음,이 예제 출력라는 분야가 없습니다 uniqueIDofSelect, 그것은 단지있다 optionValue.

어쨌든, 당신은 객체의 배열을 요구하고 있습니다 ...

그런 다음 마이클스에 대한 의견에서 다음과 같이 대답합니다.

json 객체 배열을 생성합니다. 하지만 하나의 json 객체 만 필요합니다.

그래서 당신은 객체의 배열을 원하지 않습니까?

그럼 뭘 원해?

마음을 정하십시오.


첫 번째 : 유감스럽게도 uniqueIDofSelect == selectID (선택 요소의 ID, 내 레코드의 ID를 선택 요소 ID로 유지할 수 있습니다 (레코드 업데이트 당). 또한 foreach 루프에 의해 생성 된 선택 요소의 수를 가질 것입니다. 실제로이 루프는 Enumerable 객체를 표시하기 위해 asp.net MVC에서 사용하고 있습니다 .2) 맞습니다, 전체 출력이 하나의 json 객체라는 것을 재미있게 생각한 실수입니다. 그러나 그것은 실제로 객체의 배열입니다. 그래서 마이클의 대답은 완벽합니다. 지적 해 주셔서 감사합니다.
Vikas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.