본문 바로가기
개발 업무(코딩)-개발자였을때 썼던..

json 불필요한 공백,탭,개행 제거

by 주용사 2023. 1. 9.
728x90

HMAC SHA256을 접했다. json형태의 데이터와 특정한 키를 가지고 HASHKEY를 만들어주는데 json형태의 데이터가 스페이스 한번이라도 들어가면 다른 hashkey를 내뱉는다. 값이 일정치 않아서 만들었다. 만들고 나니 사용할 일이 별로 없네..

0x20 : space

0x0A : LF(개행)

0x09 : tab

int main()
{
    
    char *databody = "{\n   \"dataHeader\" : {\n        \"udId\" : \"UDID\",\n       }\n}";

    char* shift_data = malloc(sizeof(char) * strlen(databody));

    shift_json(shift_data, databody);

    printf("[%s]\n", shift_data);
    
    free(shift_data);
    
    return 0;
}

char* shift_json(char* pshift_jsonformat, char* pjsonformat)
{
    /* 스페이스(공백), 개행, tab 제거...cf..." " 사이에 있으면 제거 안함 */
    int i, j, check = 0; // i는 원데이터, j는 복사본, check은 더블커텐션 체킹

    for(i = 0, j = 0 ; i < strlen(pjsonformat) ; i++)
    {
        if( check == 0 && pjsonformat[i] == '\"')
        {
            pshift_jsonformat[j++] = pjsonformat[i];
            check = 1;
        }
        else if( check == 0 && (pjsonformat[i] != 0x20 && pjsonformat[i] != 0x0A  && pjsonformat[i] != 0x09) ) // space, lf, tab
            pshift_jsonformat[j++] = pjsonformat[i];
        else if( check == 1 && pjsonformat[i] != '\"')
            pshift_jsonformat[j++] = pjsonformat[i];
        else if( check == 1 && pjsonformat[i] == '\"')
        {
            pshift_jsonformat[j++] = pjsonformat[i];
            check = 0;
        }
    }

    return pshift_jsonformat;
}

조금 다르게..밑에꺼가 더 믿을만하다

int JSON_SHIFT(char* pzjsonformat)
{
        int ii, jj, ncheck = 0;
        char pzshift_jsonformat[strlen(pzjsonformat)];

        memset(pzshift_jsonformat, 0x00, sizeof(pzshift_jsonformat));
        for(ii = 0, jj = 0 ; ii < strlen(pzjsonformat) ; ii++)
        {
                if( ncheck == 0 && pzjsonformat[ii] == '\"')
                {
                        pzshift_jsonformat[jj++] = pzjsonformat[ii];
                        ncheck = 1;
                }
                else if( ncheck == 0 && (pzjsonformat[ii] != 0x20 && pzjsonformat[ii] != 0x0A  && pzjsonformat[ii] != 0x09) ) // space, lf, tab
                        pzshift_jsonformat[jj++] = pzjsonformat[ii];
                else if( ncheck == 1 && pzjsonformat[ii] != '\"')
                        pzshift_jsonformat[jj++] = pzjsonformat[ii];
                else if( ncheck == 1 && pzjsonformat[ii] == '\"')
                {
                        pzshift_jsonformat[jj++] = pzjsonformat[ii];
                        ncheck = 0;
                }
        }

        for(ii = jj ; ii < strlen(pzjsonformat) ; ii++)
                pzjsonformat[ii] = 0x00;

        memset(pzjsonformat, 0x00, strlen(pzjsonformat));
        memcpy(pzjsonformat, pzshift_jsonformat, strlen(pzshift_jsonformat)) ;
        return 0;
}
728x90