대충 이해하고 쓰다가 오랜만에 소스를 보니 헷갈립니다.
개인적으로 정리할 목적으로 글을 남깁니다.
- json.dump
- json.dumps
- dump 계열은 파이썬의 객체(dict 등)를 다른 형태로 변환합니다.
- dump 함수는 파이썬 객체를 스트림 객체(파일 등)로 변환합니다.
- dumps 함수는 파이썬 객체를 한줄의(직렬화된) json 문자열로 변환합니다.
- 오류
- Expecting value:
- json.load
- json.loads
- load 계열은 대상을 파싱해서 파이썬의 객체(dict 등)로 변환합니다.
- load 함수는 스트림 객체(파일 등)에서 데이터를 읽어 파이썬 객체(dict 등)로 변환해줍니다.
- loads 함수는 json 문자열을 파싱해서 파이썬 객체로 변환해줍니다.
- 오류
- Expecting value: line 1 column 1 (char 0) 과 같은 오류가 발생한다면 인수로 들어온 자료형을 확인해보시기 바랍니다. 문자열(str)이 아닌 bytes 등의 자료형일 가능성이 있습니다. 둘 중 하나로 변환해서 되는 것을 사용하면 될 것 같습니다.
- (char 0) 다음에 {} 라고 되어 있으면 원본이 아예 dict 자료형이 아닌 것입니다. dict 는 { 'a': 'b' } 형태이기 때문입니다.
- the JSON object must be str, bytes or bytearray, not dict 변환 방향을 헷갈려서 dumps 를 써야 하는 dict 자료형을 인수로 사용한 경우입니다. 원본이 dict 가 맞다면 dumps 로 바꾸거나, dumps 를 써야하는게 맞다면 dict 가 아닌 json 문자열을 인수로 사용해야 합니다.
- 검사방법
- try/except 를 사용해서 무식하고 안전하게(?) 미리 해보면 알 수 있다!!! ㅋㅋ
- dumps 할 수 있는가?
- def IsJsonable(data):try:tempDumped = json.dumps(data)tempStripped = temp.strip("'<>() ").replace('\'', '\"')json.loads(tempStripped)return Trueexcept:return False
- loads 할 수 있는가?
- def IsDictable(data):try:tempStripped = data.strip("'<>() ").replace('\'', '\"')json.loads(data)return Trueexcept:return False
- 참고로 "" 등으로 둘러쌓이면 dumps 나 loads 호출 시 오류가 발생하지 않을 수도 있습니다.
'IT > python' 카테고리의 다른 글
[python]오류 발생시 호출 스택 출력하기 (0) | 2020.09.28 |
---|---|
[python][flask] 소스 변경시마다 자동 갱신하기 (0) | 2020.09.15 |
[python] Popen 을 통해 dict 주고 받기 (0) | 2020.08.12 |
[python] os 종류 확인하기 (0) | 2020.08.11 |
[python] 설치된 패키지 확인 (0) | 2020.07.29 |