답변:
예, JSON 배열의 요소 순서는 유지됩니다. 에서 RFC 7159 년 - 자바 스크립트 객체 표기법 (JSON) 데이터 교환 형식 (강조 광산) :
객체는 0 개 이상의 이름 / 값 쌍으로 정렬되지 않은 컬렉션입니다. 여기서 이름은 문자열이고 값은 문자열, 숫자, 부울, null, 객체 또는 배열입니다.
배열은 인 정렬 제로 이상의 값의 시퀀스.
"객체"와 "배열"이라는 용어는 JavaScript 규칙에서 비롯된 것입니다.
일부 구현은 JSON 객체의 순서도 유지하지만 이것이 보장되지는 않습니다.
실제로, 키가 NaN 유형 인 경우 브라우저는 순서를 변경하지 않습니다.
다음 스크립트는 "One", "Two", "Three"를 출력합니다.
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
다음 스크립트는 "Three", "One", "Two"를 출력합니다.
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
일부 JavaScript 엔진은 키를 삽입 순서대로 유지합니다. 예를 들어, V8 은 부호없는 32 비트 정수로 구문 분석 할 수있는 키를 제외한 모든 키를 삽입 순서대로 유지합니다 .
즉, 다음 중 하나를 실행하면
var animals = {};
animals['dog'] = true;
animals['bear'] = true;
animals['monkey'] = true;
for (var animal in animals) {
if (animals.hasOwnProperty(animal)) {
$('<li>').text(animal).appendTo('#animals');
}
}
var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }');
for (var animal in animals) {
$('<li>').text(animal).appendTo('#animals');
}
Chrome에서 V8을 사용하는 dog , bear , monkey 를 일관된 순서로 얻을 수 있습니다. Node.js는 V8도 사용합니다. 수천 개의 항목이 있어도 마찬가지입니다. 다른 JavaScript 엔진과 YMMV
"JSON 목록의 요소 순서가 유지됩니까?" 좋은 질문이 아닙니다. "[...]을 수행 할 때 JSON 목록의 요소 순서가 유지됩니까?" Felix King이 지적했듯이 JSON은 텍스트 데이터 형식입니다. 이유없이 변경되지 않습니다. JSON 문자열을 (JavaScript) 객체와 혼동하지 마십시오.
아마도 같은 작업에 대해 이야기하고 있습니다 JSON.stringify(JSON.parse(...))
. 이제 답은 : 구현에 달려 있습니다. JSON 파서의 99 % *는 객체의 순서를 유지하지 않고 배열의 순서를 유지하지만 JSON을 사용하여 다음과 같은 것을 저장할 수 있습니다.
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
객체의 순서를 유지하는 파서를 사용하십시오.
* 아마도 훨씬 더 :)