상세 컨텐츠

본문 제목

18. json 모듈

Python

by evaseo 2021. 5. 7. 16:24

본문

1.    JSON 데이터를 처리하기 위해 사용되는 파이썬의 내장 모듈

2.    import json 로딩

3.    함수

(1) json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

1)       json 파일을 읽어 dict 형태로 저장

2)       JSON 문서를 포함한 read() 지원하는 텍스트 파일이나 바이너리 파일 파이썬 객체로 직렬화(파일을 읽을 때 사용)

3)       parse_float가 지정되면, 디코딩 될 모든 JSON float의 문자열로 호출

4)       parse_int가 지정되면, 디코딩 될 모든 JSON int의 문자열로 호출

 

(2)     json.loads(): 파일 대신 object (문자열, byte arrray)에서 파이썬 객체로 역직렬화(문자열을 읽을 때 사용)

import json

# 서울시 관광지 정보 읽기
jsonTP = json.loads(open('서울_관광지.json', 'r', encoding='utf-8').read()) # dict로 디코딩​
# open('서울_관광지.json', 'r', encoding='utf-8').read()의 타입은 문자열

(3) json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

1)       파이썬 객체를 JSON 파일로 저장하는 함수

2)       .write()fp.write()를 지원하는 파일류 객체로 직렬화

3)       indent가 음이 아닌 정수나 문자열이면, JSON 배열 요소와 오브젝트 멤버가 해당 들여 쓰기 수준으로 인쇄

4)       sort_keys=True: 딕셔너리의 출력이 키로 정렬(기본값: False)

 

(4)     json.dumps(): file 대신 string으로 직렬화

 

# json데이터 처리

import json

json_file = "./pdex14.json"
json_data = {}

def readData(filename):
    f = open(filename, 'r', encoding="utf-8")
    lines = f.read()
    f.close()
    print(lines)
    return json.loads(lines) #decoding: str -> dict
   
def main():
    global json_data
    json_data = readData(json_file)
    print(type(json_data))
    d1 = json_data['직원']["이름"]
    d2 = json_data['직원']["직급"]
    d3 = json_data['직원']["전화"]
    print('이름: ', d1,', 직급: ',d2,', 전화: ', d3)
"""
def main():
    json = readData(json_file)
    print(type(json))
    d1 = json['직원']["이름"]
    d2 = json['직원']["직급"]
    d3 = json['직원']["전화"]
    print('이름: ', d1,', 직급: ',d2,', 전화: ', d3) 
"""        
if __name__ == "__main__":
    main()
실행결과
# json으로 제공된 강남구 도서관 정보 읽기
# BeautifulSoup 안써도됨
import urllib.request as req
import json

url = "http://openapi.seoul.go.kr:8088/sample/json/SeoulLibraryTime/1/5/"

plainText = req.urlopen(url).read().decode()
print('type(plainText):', type(plainText))
#메모리 낭비를 방지하기위해 띄어쓰기 없이 한줄로 쭉~ 나옴

jsonData = json.loads(plainText)
print('type(jsonData):', type(jsonData))
print('jsonData:\n', jsonData)
print('jsonData["SeoulLibraryTime"]["row"][0]["LBRRY_NAME"]:', jsonData["SeoulLibraryTime"]["row"][0]["LBRRY_NAME"])

libData = jsonData.get("SeoulLibraryTime").get("row") # = jsonData["SeoulLibraryTime"]["row"]
print('libData:\n', libData)

name = libData[0].get('LBRRY_NAME') # = jsonData["SeoulLibraryTime"]["row"][0]["LBRRY_NAME"]
print('name:', name)
print()

for data in libData:
    name = data.get('LBRRY_NAME')
    tel = data.get('TEL_NO')
    addr = data.get('ADRES')
    print(name,'\t', tel,'\t', addr)
실행결과

 

[참고] Python: JSON 개념과 json 모듈 사용법 (tistory.com)

직렬화 및 역직렬화 참고 [python] serialize (직렬화) | 코딩장이 (itholic.github.io)

'Python' 카테고리의 다른 글

20. Selenium  (0) 2021.05.07
19. schedule 모듈  (0) 2021.05.07
17. BeautifulSoup  (0) 2021.05.06
16. pandas - (2) DataFrame  (0) 2021.05.02
16. pandas - (1) 개요, Series  (0) 2021.05.01

관련글 더보기