json 객체의 크기를 얻습니다.


234

나는 AJAX 요청에 의해 반환되는 json 객체를 가지고 있으며 .length계속 반환하기 때문에 문제가 undefined있습니다. 내가 올바르게 사용하고 있는지 궁금합니다.

console.log(data.length);
console.log(data.phones.length);

둘 다 undefined유효한 개체이지만 반환 합니다.

업데이트 :
JSON 객체 샘플이 반환되었습니다.

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

반환 된 JSON 샘플을 게시 할 수 있습니까?
Joe

잘 모르겠습니다. 귀하의 질문도 괜찮습니다.
Joe

답변:


555

이런 식으로 사용할 수 있습니다

<script type="text/javascript">

  var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}

  var count = Object.keys(myObject).length;
  console.log(count);
</script>

62
@Matt, 모든 코드가 IE 7 또는 8에서 작동하는 것은 필수는 아닙니다. 보호되지 않는 이러한 비표준 플랫폼은 단순히 단점입니다.
Olofu Mark

5
@OlofuMark 모두가 사용중인 브라우저를 선택할 수있는 것은 아닙니다 (예 : 잠겨있는 네트워크, 사내 응용 프로그램에서 사용하는 버전이 지정된 IE DLL 종속성). 오래된 브라우저를 수용하는 것은 다음 그들을 정당화 될 수 무시 상당한 노력이 필요하지만,이 같은 사소한 경우에 그것으로 단지 무례 경우
tomfumb

7
@OlofuMark 개발자는 해당 버전을 지원할 필요는 없지만 개발자가 생성 한 코드가 특정 버전에서 작동하지 않아이를 고려할지 여부를 결정할 수 있는지 알아야합니다.
David Navarre

JSON이 중첩 배열을 가질 필요가없는 솔루션을 보는 것이 좋습니다. JSON의 요점은 모든 것을 객체로 만드는 것이라고 생각했습니다.
Healforgreen

그것은 json 객체의 길이를 얻는 환상적인 솔루션입니다
Shaymol Bapary

54

문제는 객체가 연관 배열로 사용될 때도 객체가 배열과 동일하지 않기 때문에 전화 객체에 길이 속성이 없다는 것입니다 (반환하는 JSON 어딘가에 정의하지 않는 한). 전화 객체가 배열이면 길이가 생깁니다. 두 가지 옵션이 있습니다.

  1. '전화'가되도록 JSON 구조를 변경하십시오 (가능한 경우)

    "phones":[{"number":"XXXXXXXXXX","type":"mobile"},{"number":"XXXXXXXXXX","type":"mobile"}]

    (전화 번호가 0 인덱싱 된 배열로 반환되므로 전화 번호별로 식별자가 없습니다.) 이 응답에서 phones.length유효합니다.

  2. 예를 들어 휴대 전화 객체에 포함 된 객체를 반복하고 원하는대로 계산합니다. 예 :

    var key, count = 0;
    for(key in data.phones) {
      if(data.phones.hasOwnProperty(key)) {
        count++;
      }
    }

새 브라우저 만 타겟팅하는 경우 옵션 2는 다음과 같습니다.


내 JSON 객체가 jsonObject라는 변수에 저장되어 있고 위와 동일한 JSON이있는 경우 첫 번째 솔루션으로 JSON 객체의 길이를 얻는 방법은 무엇입니까? "phones": [{ "number": "XXXXXXXXXX" , "type": "mobile"}, { "number": "XXXXXXXXXX", "type": "mobile"}]
Erick

29

underscore.js 사용을 고려하십시오 . 다음과 같이 크기를 확인할 수 있습니다.

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3

24

JSON 형식을 변경할 필요가 없습니다.

바꾸다:

console.log(data.phones.length);

와:

console.log( Object.keys( data.phones ).length ) ;

16
var json=[{"id":"431","code":"0.85.PSFR01215","price":"2457.77","volume":"23.0","total":"565.29"},{"id":"430","code":"0.85.PSFR00608","price":"1752.45","volume":"4.0","total":"70.1"},{"id":"429","code":"0.84.SMAB00060","price":"4147.5","volume":"2.0","total":"82.95"},{"id":"428","code":"0.84.SMAB00050","price":"4077.5","volume":"3.0","total":"122.32"}] 
var obj = JSON.parse(json);
var length = Object.keys(obj).length; //you get length json result 4

2
이것은 이미 파싱 된 json 객체입니다. 위의 명령문을 실행하면 'Json에서 예기치 않은 토큰 o'오류가 발생합니다. json의 길이를 계산하려면 var length = Object.keys (json) .length를 직접 수행 할 수 있습니다.
Aayushi


-3

이것을 사용하십시오

//for getting length of object
 int length = jsonObject.length();

또는

//for getting length of array
 int length = jsonArray.length();

6
length ()는 JSON 객체 함수가 아닙니다
Sunding Wei

-5
$(document).ready(function () {
    $('#count_my_data').click(function () {
        var count = 0;
        while (true) {
             try {
                var v1 = mydata[count].TechnologyId.toString();
                count = count + 1;
            }
            catch (e)
            { break; }
        }
        alert(count);
    });
});

1
목록에서 요소가 부족하다는 것을 알리는 예외를 기다리는 것은 나쁜 생각이며,이 방법은 요소 (마지막에도)에 TechnologyId속성 이없는 경우 자동으로 잘못된 수를 표시합니다.
tomfumb

1
이 코드는 너무 나빠서 더 이상 언급하지 않을 것입니다. 투표 -1!
Georgi-it
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.