개발 창고/NodeJS

[VanillaJS] 변수 JSON 변환 가능 여부 체크

로이제로 2023. 1. 18. 22:00
반응형
/**
* 파라미터가 Json으로 된 string인지 여부
* @param value 검사할 string값
*/
function isJsonString(value){
    try{
        // Cond. value의 데이터 타입이 string인 경우
        if(typeof value == "string"){
            // Cond. Json으로 Parsing이 정상적으로 된 경우
            if(typeof JSON.parse(value) == "object"){
                return true;

            // Cond. Json으로 Parsing이 정상적으로 되지 않은 경우
            }else{
                return false;
            }

        // Cond. value의 유형이 string이 아닌 경우
        // :: Json형태의 string이 아니므로
        }else{
            return false;
        }

    // Cond. JSON.parse 중 오류가 발생하는 경우
    // :: JSON String인 경우 정상적으로 Parsing될 것이므로
    }catch(e){
        return false;
    }    
}

 cookie에서 값을 읽거나 ajax통신 등을 통하여 값을 전달받아 처리하는 경우 등등 값을 처리하는 경우가 빈번하게 발생하곤 합니다. 하지만 일부 데이터는 부득이하게 object가 저장되지 않기 때문에 object를 string으로 변환하여 저장하곤 합니다. 그러면 이 object를 다시 불러올 때는 string으로 불러와질 것이고, 다시 변환을 해야 하는데, 가끔 이 부분이 말썽을 부리곤 합니다.

 

1/ 기존 저장 데이터가 string이었다가 json형태로 바뀐 경우

2/  저장된 데이터가 손실되어 완벽한 json형태로 전달되어지지 않은 경우
     (ex. Database에서 column길이가 짧아 완벽하게 저장되지 않은 경우)

 

 제가 자주 겪은 이유는 위의 두 상황이 많은데, 그 중에서도 1번이 단연 많았습니다. 이 경우에는 데이터 처리 전에 해당 데이터가 json 형태의 데이터가 맞는지 유효성 검사가 필요합니다.

 

만약 아래와 같은 값이 있다고 가정한다면,

 위에서 처럼 각 값들은 각양각색의 type형태로 되어있으며, 데이터 전달 시 충분히 받을만한 데이터들입니다. 이 중에서 json형태의 string이 있는지 글의 맨 처음에 적어둔 함수를 통하여 확인해 보면 아래와 같은 결과가 발생합니다.

 

value3과 value5의 경우 json으 된 string이므로 true가 반환되고

value2와 value4는 json이지 json으로 된 string이 아니므로 false가 반환되고,

value8의 경우 json형태가 깨진 형태이므로 false

그 외에는 다른 형태이므로 false가 반환됩니다.

반응형