[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와 관련된 것이라는 것이다. 원래의 영어의 뜻과 같이 '덮어쓰다'의 뜻으로 사용된 것이다.

ref

Read more

airflow 구성하고 vscode로 코딩하기

맥에서 했으면 훨씬 구성이 쉬웠겠지만, 그리고 poetry로 했으면 훨씬 쉬웠겠지만 워낙 규모가 있는 라이브러리이다 보니 과정이 어려워 다른 참조들을 보면서 따라했다. 기본적으로 poetry랑 쓰기 어려운 이유는 airflow 내부의 라이브러리에 따라 poetry가 버전을 참조하지 못해서 에러가 나는 경우가 존재한다고 한다. 또한 하나의 문제는 mac에서는 그냥 리눅스가 존재하지만 윈도우에서 하려면 윈도우용 linux인