[Json] dump vs dumps
json은 javascript object notation
의 줄임말로 웹 어플리케이션에서 구조화된 데이터를 표현하기 위한 string 기반의 포맷이다. 서버에서 클라인트로 데이터를 전송하여 표현하거나, 그 반대로 클라이언트에서 서버로 보내는 경우들에 사용된다. javascript 객체 문법과 굉장히 유사하지만 워낙에 범용성이 넓게 설계되어 있어서 다른 언어들에도 많이 사용된다. 기본적으로 python 에는 json 이 내장 모듈이다. 바로 import json해주면 된다.
json은 str 형태로 존재한다. 그래서 type(json_data)를 찍어보면 str로 나온다. 근데 python에서는 기본적으로 json처럼 생겼던 것에 대한 다룰 때는 dictionary로 다룬다. 그니깐 string -> dict(python 네이티브 객체)로 변환하는 것을 파싱(Parsing)이라고 한다. 반대는 문자열화(Stringfication)이라고 한다.
loads() : parsing
일반적으로 파일에 저장되어있는 json 문자열을 읽어오거나, http request body를 읽을 때 자주 사용된다.
import json
json_string = '''{
"id": 1,
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874"
},
"admin": false,
"hobbies": null
}'''
json_object = json.loads(json_string)
assert json_object['id'] == 1
assert json_object['email'] == 'Sincere@april.biz'
assert json_object['address']['zipcode'] == '92998-3874'
assert json_object['admin'] is False
assert json_object['hobbies'] is None
dumps() : Stringfication
파이썬 객체(dict)를 json string으로 변환한다. dumps한 것을 바로 jupyter에서 뽑아보면 String처럼 보이지만 print(json_data)로 해보면 생긴게 dictionary처럼 나온다. 하지만 실제로 type(json_data)로 찍어보면 str가 나오는 것을 확인할 수 있다.
import json
# 파이썬 객체
data = {
"name": "Alice",
"age": 30,
"city": "New York"
}
# JSON 문자열로 변환
json_string = json.dumps(data)
print(json_string)
load() / dump() : file 관련
file을 다룰 때는 s가 없이 사용하게 된다. 의미는 동일하다.
- load : json file -> python dict
- dump : write에 관련된 것.
with open('input.json') as f:
json_object = json.load(f)
with open('output.json', 'w') as f:
json.dump(json_object, f, indent=2)
가장 중요한 포인트는 json.dump는 write와 관련된 것이라는 것이다. 원래의 영어의 뜻과 같이 '덮어쓰다'의 뜻으로 사용된 것이다.