본문 바로가기

코딩/Python

[Python/파이썬] json 모듈 사용법

반응형

 

   json data를 처리하기 위해 파이썬 json 모듈을 활용하는 방법을 정리해보려고 한다. json은 파이썬의 key-value 형태(딕셔너리)로 이루어진 데이터를 객체로 처리하는 표준 중 하나라고 한다. 서버 간 통신 등 데이터를 json 표준을 통해 객체로 주고받을 때 표현하는 방법이다. 원래는 자바 스크립트에서 파생 되었다고 하는데 파이썬에서도 쉽게 생성하고 읽어올 수 있다. 

 

   json 모듈은 파이썬의 내장 모듈로 따로 설치가 필요없이 바로 활용가능하다. 먼저 내용을 정리하기 위해 아래처럼 json 확장자를 가진 임의의 파일을 생성해보았다.

 

 

<data.json>

{
    "YB":{
        "나이":32,
        "성별":"남",
        "사는곳":"안양"

    },

    "HJ":{
        "나이":28,
        "성별":"여",
        "사는곳":"안산"

    }
}

 

data.json

 

  이번 포스팅에서는 위 파일을 읽어보고 저장하는 방법에 대해 정리해보겠다. 먼저 .json 파일을 읽어오는 방법에 대해서 알아보자.

 

 

1. 읽기

 

<코드>

import json

#json data 열기
file_path = "C:/Users/Desktop/VS CODE/Project/json/"
with open(file_path+"data.json", encoding='utf-8') as f:
    data = json.load(f)
    print(data)

 

 

  json 파일을 파이썬에서 읽어오기 위해선 json 모듈을 import하고 json 객체를 생성해야 한다. 객체를 생성하는 방법은 위 코드와 같이 json의 함수인 load를 활용해야 한다. 코드를 설명해보면 파이썬 with 구문을 활용해서 .json 확장자 파일을 객체 f로 정의했다. 그리고 객체 f를 json 함수의 load로 읽어왔다.

 

  파이썬 with 구문에 대해서는 이전에 포스팅 한 내용이 있으니 아래 링크를 참고하면 좋을 것 같다.

(참고링크 : 2021.08.07 - [코딩/Python] - [Python/파이썬] with ~ as ~ 구문, Magic Mathod(매직 메서드))

 

 

<결과>

{'YB': {'나이': 32, '성별': '남', '사는곳': '안양'}, 'HJ': {'나이': 28, '성별': '여', '사는곳': '안산'}}

 

 결과는 .json 파일의 내용을 그대로 파이썬 딕셔너리의 key-value 형태로 데이터를 읽어온다. 그럼 딕셔너리 문법대로 각 data에 접근이 가능한지 확인해보도록 하자.

 

 

<코드>

#딕셔너리 불러오기
print(data['YB']) 
print(data['HJ']['나이'])

 

<결과>

{'나이': 32, '성별': '남', '사는곳': '안양'}
28

 

 


※ 파이썬 딕셔너리(Dictionary) 참고

2021.06.13 - [코딩/Python] - [Python/파이썬] 자료형 - Dictionary 1편 : 기초

2021.06.19 - [코딩/Python] - [Python/파이썬] 자료형 - Dictionary 2편 : 딕셔너리 컴프리헨션

반응형

 

 

 

2. 쓰기

 

 

  이번엔 이미 위에서 생성되어있는 data.json 파일에 데이터를 수정 및 추가하고 json 파일에 저장해보려고 한다. 아래와 같이 딕셔너리를 수정하고 출력, 수정한 상태에서 .json 파일 객체를 재생성하여 결과를 출력해보았다.

 

 

<코드>

#data 쓰기
data['YB']['사는곳'] = '안양'
#새로운 data 추가
data["JW"] = {"나이":18, "성별":"남", "사는곳":"서울"}

print("수정 후 출력:")
print(data['YB']['사는곳'])
print(data['JW'])

with open(file_path+"data.json", encoding='utf-8') as f:
    data = json.load(f)

print("객체 재 호출 후 출력:")
print(data['YB']['사는곳'])
print(data['JW'])

 

<결과>

수정 후 출력:
안양
{'나이': 18, '성별': '남', '사는곳': '서울'}

객체 재 호출 후 출력:
안양
Traceback (most recent call last):
  File "c:\Users\Desktop\VS CODE\Project\json\json_test.py", line 23, in <module>
    print(data['JW'])
KeyError: 'JW'

 

 

  결과를 보면 수정하고 나서 바로 출력했을 때는, 수정사항이 반영되지만 .json 파일 객체를 재호출했을 때는 원본에 반영이 되지 않은 것으로 확인된다. 'JW'라는 사람의 정보를 추가했지만 새롭게 객체를 생성해서 데이터를 불러왓을 때 Key Error가 발생하는 것을 볼 수있다.(Key Error는 해당 Key가 없기 때문에 발생한 것임)

 

  원본 json 파일도 수정하려면 아래와 같이 코드를 사용하면 된다.

 

 

<코드>

#저장하기
with open(file_path+"data.json", 'w', encoding='utf-8') as outfile:
    json.dump(data, outfile, indent=4)

#객체 생성하기
with open(file_path+"data.json", encoding='utf-8') as f:
    data = json.load(f)

 

 

  첫번째 저장하기 with 구문에서 'w'가 보일 것이다. 'w'는 write의 약자로 원본 데이터를 수정하는 것을 가능하게 해준다. 그 다음, json.dump 함수를 통해 수정한 딕셔너리를 .json파일에 쓰는 과정을 거친다. 그 다음, 아래 코드를 통해 출력해보면 추가, 수정 된 내용이 원본파일에 반영된 것을 확인할 수 있다.

 

  dump 함수의 indent=4는 .json 파일을 저장할 때, 파일 내용을 한눈에 볼 수 있도록 들여쓰기 하는 코드이다.

 

 

<코드>

print("수정 후 출력:")
print(data['YB']['사는곳'])
print(data['JW'])

 

<결과>

수정 후 출력:
안양
{'나이': 18, '성별': '남', '사는곳': '서울'}

 

 

실제 .json 파일이 변경되었는지 확인해보자.

 

수정 후, dat.json

 

 

"JW" 항목이 정상적으로 추가된 것을 확인할 수 있다.

 


참고링크 

https://codechacha.com/ko/python-read-write-json-file/

 

Python - JSON 파일 읽고 쓰는 방법

json.dump()로 dict를 JSON 파일로 저장하거나, json.load()로 JSON 파일을 읽어 dict 객체로 가져올 수 있습니다. 또한 데이터를 추가하고 다시 JSON 파일로 저장할 수 있습니다. indent 옵션을 인자로 주면 보

codechacha.com

 

728x90