0. Introduction
async
와bs4
module을 사용하여 한 특정 웹 사이트를 스크랩핑하는 코드를 작성하고 있다.그 과정에서 Error가 발생하여 이에 대한 원인과 해결책을 기록두는 것뿐만 아니라, 모르는 것들에 대해 학습한 걸 기록한다.
이번에는 ‘Serialization(직렬화)’ 란 개념과 Flat data, Nested data 무엇인지 알아보자. 마지막으로,
json.loads()
와json.dumps()
를 알아본다.이후 이 주제와 관련되어 새롭게 학습한 것이 있다면 이 포스팅에 정리한다.
1. Serialization(직렬화)
python docs-guide: Data Serialization와 stackoverflow - What is data serialization?에 따르면 data serialization의 정의를 다음과 같이 내린다.
‘Data serialization의(직렬화)‘란 구조화된 데이터를 저장되거나 공유될 수 있는 한 가지 형식으로 전환하는 것으로 즉, 저장되거나 네트워크를 통해 보내지기 위해서 다른 형식으로 객체를 인코딩하는 걸 말한다. 이 과정에서 데이터의 사이즈를 줄이는 효과도 가진다.
추가: 직렬화와 역직렬화 문서에 정리한 것처럼 직렬화 란 json을 string으로 바꾸는 것 을 말하며, 역직렬화 란 string을 json으로 바꾸는 것 을 의미한다.
직렬화의 전환되는 형식: 두 가지
Flat vs Nested data
전환되는 형식에는 두 가지 종류 가 있는데, 바로 Flat vs Nested data 다.
각 데이터 예시는 Flat vs. Nested Data Layer을 참고하자.
간단히 말하자면 이와 같다.
Flat은 계층화되어 있지 않은 데이터 종류로 one level의 properties나 “key: value” 쌍으로 구성된 데이터를 의미하고, nested는 계층화되어 있어 몇 개의 level로 구성된다.
각 데이터 타입에 대한 장단점도 위 링크에 있으니 참고하자.
Flat data
파이썬은 data에 flat data가 포함되어 있다면 직렬화하기 위해 repr
method나 csv
module을 제공한다.
- [TIL]Python basic 20: with open as
- [TIL]Python basic 21: csv.read, write
- [TIL] Python basic 25: _ _str _ _ vs _ _repr _ _
Nested data
Nested data의 종류에는 YAML, JSON, XML 등이 있다.
이 type들 모두 import yaml, json, xml
을 통해 nested data를 다룰 수 있다.
여기서는 import json
에 대한 것만 다음 챕터에서 다룰 것이다.
2. json.loads 와 json.dump
JSON이란 무엇인지 학습한 후, json.loads()
와 json.dumps()
에 대해 알아본다.
먼저 두 함수에 대해 그림으로 간략히 표현하면 이와 같다.
즉, json.dumps()
는 직렬화를 하는 함수이고, json.loads()
는 역직렬화를 하는 함수다.
JSON이란?
JavaScript Object Notation의 약어로,
{ }
중괄호(curly braces)로 둘러쌓여진 것으로, key와 value 쌍으로 쓰여진다.
- python에서는 dictionary data type을 생각해보자.
json.loads
string을 json Object 즉, dictionary 형태로 바꾼다. (역직렬화)
|
|
출력 결과는 다음과 같다.
|
|
- 즉,
.read()
는 json 파일은 string 문자열로 읽어오고,json.loads()
는 이를 dictionry인json
object로 읽어온다.
그러면 read()와 dumps() 의 차이는 무엇일까??? 둘 다 string 을 반환하지만, dumps는 json 형태의 string으로 바꾸고, read()는 작성된 형태 그대로 읽어온다.
json.dumps
json Object를 string으로 바꿔준다. (직렬화)
- 위에 코드를 이어서 사용해보자.
|
|
- 즉,
json
object로 넘겨주면 데이터를 추출하여 이를 string type으로 반환한다는 걸 알 수 있다.