내 초기 충동 JSON에 직접 변환 할 수 있었다, 그러나 나는 JSON.stringify()
이 같은 반환 것을 깨달았다 : 배열이 정의되지 않은 슬롯의 무리를 가지고
["apple",null,null,"pineapple",null,null,null,null,null,null,null,null,"car",null,null,null,null,null,null,null,null,"apple",null,null,null,null,null,null,null,null,null,null,null,"dog",null,null,null,null,null,null,null,"cat"]
때문에 모든 null
JSON 아무튼 때문에 될 정의되지 않은 값을 지원하지 않습니다. 당신이 null이 아닌 정의되지 않은 배열로 끝날 것이라고 배열로 다시 변환 할 때를 제외하고는 저장할 필요가 있다면 괜찮을 것입니다. 그렇기 때문에 (큰 문제는 아니지만) 모든 것을 허용해야합니다. 당신이 그것을 인간이 읽을 수 있기를 바라는 것처럼 들리는 경우도 있습니다.
대신 개체로 변환 한 다음 JSON.stringify()
을 사용하여 개체를 JSON으로 변환하는 것이 좋습니다. 다시 변환하려면 JSON.parse()
을 사용하여 문자열을 객체로 변환 한 다음 객체 속성을 반복하여 희소 배열을 만듭니다.
이 같은 JSON 문자열을 초래할 것이라고 제안하고있어 무엇 :
{"0":"apple","3":"pineapple","12":"car","21":"apple","33":"dog","41":"cat"}
코드 :
function sparseArrayStringify(arr) {
var obj = {},
i;
for (i=0; i < arr.length; i++)
if (typeof arr[i] != "undefined")
obj[i] = arr[i];
return JSON.stringify(obj);
}
function parseToSparseArray(str) {
var arr = [],
obj = JSON.parse(str),
k;
for (k in obj)
arr[k] = obj[k];
return arr;
}
var stringifiedArray = sparseArrayStringify(Ar); // where Ar is your array
// and change it back
var anArray = parseToSparseArray(stringifiedArray);
근무 데모 : http://jsfiddle.net/XXqVD/
참고 : 내 parseToSparseArray()
에서 함수 구문 분석중인 문자열의 개체 속성이 실제로 non-neg인지 테스트하지 않았습니다. ative 정수이지만 원할 경우 추가 할 수 있습니다.
최신 브라우저는 연결된 방법으로 JSON
개체를 지원하거나 이전 브라우저의 경우 json2.js
라이브러리를 포함 할 수 있습니다.
그러나 귀하의 질문에있는 코드는 유효하지 않습니다. JavaScript : JS에 유형이있는 변수를 선언 할 수 없습니다. 배열, 객체 등을 선언하는 방법은 내 코드의 예제를 참조하십시오.
편집 : 좋아, 왜 JSON 버전이 잘 알려진 표준 형식 일 때 비 JSON 버전을 원할지 모르겠다.하지만 여기서는 JSON 버전의 형식을 읽고 쓰는 테스트되지 않은 함수가 있습니다. 질문 : 배열 요소 중 하나가 쉼표 나 하이픈을 포함 할 경우 제안 형식이 작동하지 않습니다
"0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple"
참고. 그래서 JSON이 당신이 가야 할 길입니다. 어쨌든 :
function serialiseArray(arr) {
var workingArray = [],
i;
for (i=0; i < arr.length; i++)
if (typeof arr[i] != "undefined")
workingArray.push(i + "-" + arr[i]);
return workingArray.join(",");
}
function deserialiseArray(str) {
var arr = [],
items = str.split(","),
item,
i;
for (i=0; i < items.length; i++) {
item = items[i].split("-");
arr[item[0]] = item[1];
}
return arr;
}
참조 http://www.w3schools.com/jsref/jsref_tostring_array.asp, http://www.w3schools.com/jsref/jsref_join.asp 및 http://www.w3schools.com /jsref/jsref_split.asp – Stefan