ProgramingTip

JSON.stringify는 일반 Javascript 배열에서 작동하지 않습니다.

bestdevel 2021. 1. 10. 22:57
반응형

JSON.stringify는 일반 Javascript 배열에서 작동하지 않습니다.


여기에 뭔가 빠졌지 만 다음 코드 ( 바이올린 )는 빈 곳을 반환합니다.

var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);

이 배열을 JSON으로 처리하는 올바른 방법은 무엇입니까?


일반 자바 스크립트은 배열 숫자 인덱스 가있는 데이터를 보유하도록 설계되었습니다 . 이름이 지정된 키를 여기에 넣을 수 있습니다 (정상적인 순서가 지정되고 숫자로 색인 된 데이터를 보유하는 배열에 대한 메타 데이터를 저장하려는 경우 유용 할 수 있음). JSON 배열 데이터 유형 배열에 명명 된 키를 누를 수 없습니다 .

배열이 아닌 객체를 사용하십시오.

var test = {};           // Object
test['a'] = 'test';
test['b'] = [];          // Array
test['b'].push('item');
test['b'].push('item2');
test['b'].push('item3');
var json = JSON.stringify(test);
alert(json);

위의 좋은 설명과 예. 답을 완성하기 위해 ( JSON.stringify () 배열 기이함 with Prototype.js )를 찾았 습니다 . 일부 사이트는 JSONFilters를 사용하여 자체적으로 JSON을 구현하여 삭제하십시오.

if(window.Prototype) {
    delete Object.prototype.toJSON;
    delete Array.prototype.toJSON;
    delete Hash.prototype.toJSON;
    delete String.prototype.toJSON;
}

잘 작동하고 테스트 결과 :

console.log(json);

결과 :

"{"a":"test","b":["item","item2","item3"]}"

여기 에 대한 수정 사항을 게시했습니다.

이 함수를 사용 JSON.stringify하여 인코딩 을 수정 하고 arrays펼쳐 시작 부분에 게시 할 수 있습니다 (자세한 내용은 위 링크 확인).

// Upgrade for JSON.stringify, updated to allow arrays
(function(){
    // Convert array to object
    var convArrToObj = function(array){
        var thisEleObj = new Object();
        if(typeof array == "object"){
            for(var i in array){
                var thisEle = convArrToObj(array[i]);
                thisEleObj[i] = thisEle;
            }
        }else {
            thisEleObj = array;
        }
        return thisEleObj;
    };
    var oldJSONStringify = JSON.stringify;
    JSON.stringify = function(input){
        if(oldJSONStringify(input) == '[]')
            return oldJSONStringify(convArrToObj(input));
        else
            return oldJSONStringify(input);
    };
})();

또는 다음과 같이 사용할 수 있습니다.

var test = new Array();
test[0]={};
test[0]['a'] = 'test';
test[1]={};
test[1]['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);

이와 같이 배열을 JSON으로 처리합니다.


Json은 키-값 쌍이 될 것입니다. 그래도 여전히 값이 배열을 배열합니다. 따라서 선택의 "키"를 추가하십시오.

var json = JSON.stringify ({whatver : test});

참조 URL : https://stackoverflow.com/questions/16196338/json-stringify-doesnt-work-with-normal-javascript-array

반응형