2010-04-16 1 views
4

JSON 구현이 희소 배열을 만족스럽게 처리 할 수 ​​있는지 알아야합니다. 질문 : How to represent a sparse array in JSON?하지만 배열보다는 개체를 사용하는 것은 나를위한 옵션이 아닙니다. 배열이 필요해.희소 배열을 처리하는 JSON 구현

최소 요구 사항은 구현시 "정의되지 않은"채우기를 채우는 것입니다. 그렇지 않으면 JSON 인코딩 전에 나 자신을 채우는 방어 코드를 작성하고 있습니다.

답변

5

불가능합니다. 구현을 잊어 버려도 사양에서는 허용되지 않습니다.

http://json.org/

배열은 값으로 정의된다. 객체는 인덱스/키가 의미를 가질 때 사용됩니다.

+1

... "undefined"는 JSON 값 – Pointy

+0

이 아닙니다. 따라서 null 대신 틈새를 채울 것입니다. –

+0

글쎄, 문제는 JSON이 JSON이고, 임의의 JSON 파서가이를 이해할 수 있도록 "희소 배열"을 직접 표현할 수있는 방법이 없다는 것입니다. 그러나 JSON의 "in"및 "out"방식으로 배열을 변환하는 데 만족하면 @ Robusto의 대답이 보길 원하는 것입니다. – Pointy

2

속성 이름이 인덱스이고 속성 값이 값인 개체를 사용할 수 있습니까? 그런 다음 매개 변수를 통해 스파 스 배열을 만들면 매개 변수를 통해 실행할 수 있습니까?

function getSparseArray(obj) { 
    var ary = []; 
    for (prop in obj) { 
    var i = parseInt(prop,10); 
    if (!isNaN(i)) { 
     ary[i] = obj[prop]; 
    } 
    } 
    return ary; 
} 

당신은

{ "5":"Five", "11":"Eleven", "99":"Ninety-Nine"} 

처럼 뭔가를 보내고 단지 세 개의 값으로 생성 된 배열을 다시 얻을 것 :

ary[5] = "Five" 
ary[11] = "Eleven" 
ary[99] = "Ninety-Nine" 
ary[0] = 'undefined' 
ary[98] = 'undefined' 
etc. 
여기

ary (100)의 길이를 가질 것,하지만 그것은 당신의 관점에서 "희소 한"배열이 될 것입니다.

+0

나는 이것이 무엇을 요구했는지는 생각하지 않지만 그것이가는 것이 가장 좋은 방법이라는 데 동의한다. 물론 "null"값이 많은 일반 JSON 배열이 gzip을 사용하여 더 작아 질 수 있는지 궁금 할 수 있습니다. – Pointy

+0

'ary [0]'은'null '이 아니라'undefined'가 될 것입니다 ... – James

+0

@ J-P : 네가 맞아. 고마워. 귀하의 의견을 반영하도록 수정되었습니다. – Robusto