반응형
배경
- 클라이언트쪽에서 잘못된 json 을 보냄. 클라쪽에서 변경이 여의치 않아 api 단에서 강제 replcae 해야줘야 함
- java는 이런 내용은 string으로 대부분 처리하면 되는데..
golang은 byte 배열, string 이 각각있어서, 처리하는게 두가지 방법임 ..
잘못된 json 예시
`{"aaa":"01049447019","bbb":"안녕하세요. 입니다.
아래 링크.
설정 완료 후 이용해주세요."}`
한줄로 보내지 않고 '입니다.' 뒤에 엔터(개행)이 들어감
이 경우 언어에따라서 자동파싱되는게 있고, 안되는게 있는듯 ( 닷넷은 자동으로 보정하는 듯하다 )
golang은 자동 파싱이 되지 않아서... 에러가 발생. 그래서 강제 변환이 필요
go 웹테스트 사이트
검색해서 찾은 방법은
이거다...
이게 정확한 방법인주 알았는데, 되지 않았다 .
위방식대로 한다면
\r\n , \r --> \n 으로 변경하는건데 이 경우 다른 문제가 또 발생함
{ // 여기서 엔터가 발생
"param" : "111",
"param2 : "222"
}
위 주석처럼 의도치않은 엔터를 변경시킴, 이러면 더 문제가 되버린다
그래서 최종 아래 버전으로 바꿈
// NormalizeNewlines normalizes \r\n (windows) and \r (mac)
// into \n (unix)
func NormalizeNewlines(d []byte) []byte {
// 변경내용
// replace CR LF \r\n (windows) with LF \n (unix)
d = bytes.Replace(d, []byte{13, 10}, []byte{}, -1)
// replace CF \r (mac) with LF \n (unix)
d = bytes.Replace(d, []byte{13}, []byte{}, -1)
// 추가 코드
d = bytes.Replace(d, []byte{10}, []byte{}, -1)
return d
}
위에 url에 있는 내용을 수정한것이다
\r\n , \n , \r 을 빈값으로 변경하여 해결했다.
이렇게 할 경우, 적절한 개행을 바꿀수가 없는데, 이건 방법이없다. 애초에 클라이언트쪽에서 잘못 보내고 있는것이니...
문자열로도 같은 방법이 가능하다
tmp := string(bodyBytes)
tmp = strings.Replace(tmp, "\r\n", "", -1)
tmp = strings.Replace(tmp, "\r", "", -1)
tmp = strings.Replace(tmp, "\n", "", -1)
tmp2 := []byte(tmp)
이런 방식으로 가능
문자열, byte 배열 둘 다 가능하니 선택해서 개발하길
반응형
'Web > GoLang' 카테고리의 다른 글
[golang]Go에서 리플렉션을 통해 빈 값을 빠르게 감지하는 방법 (0) | 2022.05.24 |
---|---|
[golang] 개발테스트시 강제 에러 발생 코드 (0) | 2022.04.26 |
[golnag] json 관련 문서 (0) | 2021.08.27 |
[golang] json 파싱시 int, string 동시에 받기 (0) | 2021.08.27 |
[golang] URL 인코딩 방법 (0) | 2021.08.27 |
댓글