1. 서버에서 데이터 받기
1) 아이디와 이름 순서대로 데이터를 전달
🚀 test, tom ➡️ 인덱스를 사용하는 것처럼 위치값으로 파악
🚀 빈값이나, 값에 구분자가 들어가는 경우 어려움등의 문제로 사용 빈도 낮음
2) xml 방식
🚀 <id>test</id>
<name>tom</name>
➡️ 마크업 방식, 속성값이 반복되어서 상대적으로 데이터의 크기가 커짐
3) json 방식
🚀 'id': 'test',
'name': 'tom'
➡️ 객체 속성 표현 방식. 상대적으로 간결한 표현
2. JSON 파일 입출력
1) JSON 파일이란?
👾 JavaScript Object Notation의 약자로 JavaScript의 객체 표현 방법이라는 뜻
👾 데이터를 전달할 때 사람이 읽고 쓰기 쉽도록 텍스트 형식을 정해 놓은 개방형 데이터 표준 형식
👾 많은 양의 데이터를 처리할 때는 속도가 느린 단점이 있으므로 경량의 데이터를 주고 받을 때 주로 사용
2) JSON 데이터 형식
👾 속성 attribute - 값 value 쌍으로 구성된 데이터들이 순서없이 모여 있는 구조
⚡️ 중괄호를 이용해서 전체 JSON 데이터를 묶어 주고 속성과 값 사이에 콜론(:)을 붙여 줌
⚡️ 속성과 값으로 구성된 각 데이터의 구분은 쉼표(,)를 이용
∴ 즉, 파이썬의 딕셔너리와 같은 모습
3) JSON 파일 생성
👾 JSON 데이터 처리를 위해서 json 모듈 제공
⚡️ json 모듈을 import 하면 리스트나 딕셔너리와 같은 파이썬 객체를 JSON 데이터로 변환하거나,
JSON 데이터를 다시 파이썬 객체로 변환할 수 있음
👾 JSON 인코딩 encoding : 파이썬 객체를 JSON 문자열로 변환하는 것
⚡️ 변환된 문자열을 파일에 기록하면 확장자가 json인 JSON 파일 (*.json)을 만들 수 있음
⚡️ json.dumps() 메소드를 이용해서 JSON 인코딩을 처리할 수 있음
# json 모듈 import
import json
dict_list = [
{
'name': 'james',
'age': 20,
'spec': [
175.5,
70.5
]
},
{
'name': 'alice',
'age': 21,
'spec': [
168.5,
60.5
]
}
]
# 인코딩 메소드를 이용해 json 문자열로 변환
json_string: str = json.dumps(dict_list)
print(json_string)
'''
실행결과)
[{"name": "james", "age": 20, "spec": [175.5, 70.5]},
{"name": "alice", "age": 21, "spec": [168.5, 60.5]}]
'''
# output_02 디렉토리에 json 파일 생성
with open('../output_02/dict_list_01.json', 'w') as file:
file.write(json_string)
print('dict_list_01.json 파일이 생성되었습니다.')
(1) indent 옵션
📌 JSON 데이터는 네트워크를 주고받는 데이터의 표준 형식
📌 파일의 크기를 줄이기 위해서 의도적으로 불필요한 공백 문자 white space가 제거된 상태로 만들어 지기 때문에
사람들이 직접 그 내용을 해석하기에는 불편
⚡️ 보기 좋은 형식으로 만들기 위해서 json.dump() 메소드에 indent 옵션을 추가 할 수 있음
➡️ indent 옵션을 추가하면 JSON 데이터에 들여쓰기와 줄 바꿈이 추가되면서 보기 좋은 형식으로 만들어짐
json_string = json.dumps(dict_list, indent=4) # indent 옵션 사용
with open('../output_02/dict_list_02.json', 'w') as file:
file.write(json_string)
print('dict_list_02.json 파일이 생성되었습니다.')
📁 indent = 4는 들여쓰기로 공백문자 4개로 처리 한다는 의미
📁 하지만 indent 옵션을 사용하면 파일의 크기가 커지기 때문에 네트워크 전송이 목적이라면 사용하지 않는 것이 좋음
📁 JSON 데이터는 문자열을 큰따옴표로 묶어서 처리
4) JSON 파일 읽기
👾 JSON 디코딩 decording : 인코딩된 JSON 데이터를 다시 파이썬 객체로 변경하는 것
👾 디코딩을 처리하는 메소드는 json.loads()
with open('../output_02/dict_list_02.json', 'r') as file:
json_reader = file.read()
dict_list = json.loads(json_reader)
print(dict_list)
# [{'name': 'james', 'age': 20, 'spec': [175.5, 70.5]},
# {'name': 'alice', 'age': 21, 'spec': [168.5, 60.5]}]
print(type(dict_list)) # <class 'list'>
📁 json 파일을 read() 메소드로 한 번에 전체를 읽어 들여 json_reader에 저장
📁 json.loads(json_reader)를 통해서 디코딩이 이뤄지면 파이썬 객체인 dict_list가 생성
📁 dict_list는 리스트 내부에 2개의 딕셔너리가 저장된 구조이기 때문에 for 문을 이용해서 그 내용을 모두 처리 가능
3. JSON과 API
🚀 JSON은 데이터를 사람이 읽을 수 있는 문자열(바이너리가 아니라 텍스트)로 나타내는 방식
🚀 많은 웹 사이트에서 프로그램이 웹 사이트와 상호 작용하는 데 JSON 형식의 내용을 제공
➡️ 이를 API 제공이라고 하고, API로 접근하는 것은 URL을 통해 일반 웹 페이지에 접근하는 것과 동일
➡️ 차이점은 API가 반환하는 값은 기계를 위한 JSON 형식으로 되어 있음
🚀 원하는 데이터를 얻으려면 프로그램이 요청해야 할 URL 뿐만 아니라 반환되는 JSON 데이터 구조의 일반적인 형식에 대한 문서도 찾아 봐야 되는데, API를 제공하는 모든 사이트는 이 문서를 제공
1) JSON 모듈
👾 JSON 모듈은 json.loads(), json.dumps() 함수로 JSON 데이터와 파이썬 값을 서로 변환하는 모든 세부 사항을 처리
👾 JSON은 문자열, 정수, 부동 소수점 수, 불, 리스트(배열) '[]', 딕셔너리(객체) '{}', NoneType 자료형 값만 저장 가능
import json
2) loads() 함수를 사용하여 JSON 읽기
👾 JSON 데이터가 들어 있는 문자열을 파이썬 값으로 변환하려면, 이를 json.loads() 함수에 전달
👾 JSON 문자열은 큰 따옴표를 사용
string_json_data: str = '{"name": "Zopgie", "isCat": true, "miceCaught": 0, "felineIQ": null}'
json_data_as_python_value = json.loads(string_json_data)
print(type(json_data_as_python_value)) # <class 'dict'>
print(json_data_as_python_value)
# {'name': 'Zopgie', 'isCat': True, 'miceCaught': 0, 'felineIQ': None}
# 온라인에서 JSON 파일 열기
import urllib.request as request
# urlopen() 함수 사용하여 소스 가져옴
json_data = request.urlopen("https://jsonplaceholder.typicode.com/todos/1").read()
print(type(json_data)) # <class 'bytes'>
# loads() 함수로 파이썬 객체로 변환
python_data = json.loads(json_data)
print(type(python_data)) # <class 'dict'>
print(python_data)
#{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}
📌 urllib.request : 내부모듈(url 라이브러리). 기본적인 기능만 제공
📌 requests : 외부모듈. 다양한 기능을 제공. 실작업에 많이 사용
3) dupms() 함수를 이용하여 JSON 작성하기
👾 파이썬 값을 JSON 형식 데이터 문자열로 변환
python_data: dict = {'name': 'Zopgie', 'isCat': True, 'miceCaught': 0, 'felineIQ': None}
json_data: str = json.dumps(python_data)
print(type(json_data)) # <class 'str'>
print(json_data)
# {"name": "Zopgie", "isCat": true, "miceCaught": 0, "felineIQ": null}
📌 JSON 에서는 True ▶️ true, None ▶️ null 로 표현
[ 내용 참고 : IT 학원 강의 자료 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] JSON API 활용 예제 2 (0) | 2024.03.06 |
---|---|
[Python] 공공데이터 활용한 JSON API 예제 (2) | 2024.03.05 |
[Python] CSV 파일 입출력, reader()/writer(), DictReader()/DictWriter() (2) | 2024.03.04 |
[Python] mutable/immutable, % 연산자, 삼항 조건연산자, 지역변수/전역변수 (0) | 2024.03.03 |
[Python] 파일과 경로, 파일 열기, 파일 닫기, 파일 생성, 파일 입출력, pickle (0) | 2024.03.03 |