JSON 데이터 다루기
- 파이썬 객체 → JSON 문자열로 변환하기
- JSON 문자열 → 파이썬 객체로 변환하기
- 여러 개의 항목을 가진 JSON 문자열 딕셔너리로 변경하기
- 여러 개의 JSON 객체 나타내기
- JSON 문자열 데이터프레임으로 변환하기
JSON
Java Script Object Notation
원래는 자바 스크립트 언어를 위해 만들어졌지만, 현재는 범용적인 포맷으로 사용되고 있다.
대부분의 프로그래밍 언어는 JSON 형태의 텍스트로 읽고 쓰기가 가능하다.
✔ 형태
JSON은 파이썬의 딕셔너리와 리스트를 섞어놓은 것 같이
중괄호 안에 키와 값이 콜론(:) 으로 연결되어 있다.
{ "tistory" : "chummlog" }
· 키와 값에 문자열을 사용하기 위해서는 항상 큰 따옴표(")로 감싸주어야 한다.
💻 연습 >
JSON 형식으로 구글 코랩에서 파이썬 딕셔너리를 만들어보았다.
위와 같이 JSON 포맷은 파이썬 딕셔너리와 잘 호환된다.
다만, 웹 기반 API로 데이터를 전달할 때에는 파이썬 딕셔너리가 아닌 '텍스트'로 전달해야 한다.
✔ 파이썬 객체 → JSON 문자열로 변환하기
json.dumps() 함수
json 패키지에서 파이썬 객체를 json 형식에 맞는 텍스트로 바꿀 때 사용한다.
💻 연습 >
❓ ensure_ascii 매개변수를 'False'로 지정한 이유
→ 딕셔너리 dic에 한글이 포함되어 있기 때문이다.
· 기본적으로 json.dumps() 함수는 아스키 문자 외 다른 문자를 16진수로 출력하기 때문에 한글이 제대로 보이지 않는다.
이처럼 웹기반 api로 전송하려는 파이썬 객체는 json.dumps() 함수를 사용해서 JSON 문자열로 변환>전송할 수 있다.
그렇다면 반대로
✔ JSON 문자열 → 파이썬 객체로 변환하기
json.loads() 함수
JSON 문자열을 파이썬 객체로 변환할 때 사용한다.
💻 연습 >
위의 dic_str를 json.loads() 함수를 사용해서 파이썬 객체(딕셔너리)로 변환해보자.
∴ 웹 기반 API에서 전달되는 데이터가 JSON 문자열이라면 json.loads() 함수를 사용해서 파이썬 객체로 변환한 후 분석 프로그램에서 사용이 가능하다.
✔ 여러 개의 항목을 가진 JSON 문자열 딕셔너리로 변경하기
Step1
name, author, year 항목을 가진 json 문자열을 dictionary 로 변경해보자.
Step2
name 키에 여러 항목을 넣어보자
dic3_1 = json.loads('{"name":["데이터를 엮는 사람들 데이터 과학자","데이터 분석 업계에 진솔한 이야기"]
,"author":"권정민"
,"year":"2023"}'
)
Step2 의 name 키-값의 모습은 딕셔너리 안에 리스트가 중첩된 것으로 볼 수 있다.
✔ 여러개의 JSON 객체 나타내기
JSON 객체를 대괄호 안에 나열해서 JSON 배열로 나타낼 수 있다.
[{"name":"데이터를 엮는 사람들 데이터 과학자", "author":"권정민", "year":2023},
{"name":"혼자 공부하는 데이터 분석", "author":"박해선", "year":2022}'
]
JSON 배열은 파이썬 리스트로 변환된다.
d4_dic[0]은 파이썬 리스트의 첫번째 딕셔너리가 된다.
∴ d4_dic[1]['name'] 이라면 두 번째 딕셔너리의 'name'의 키값을 반환한다.
✔ JSON 문자열 데이터프레임으로 변환하기
read_json() 함수
json 문자열을 읽어서 데이터 프레임으로 변환하는 pandas 함수
💻 연습 >
dic4_str을 데이터프레임으로 변환해보자.
> 판다스 데이터프레임 클래스를 사용해서도 가능하다.
'Python' 카테고리의 다른 글
[Python/ 데이터 분석] API (Application Programming Interface) 사용하기 (0) | 2023.04.10 |
---|---|
[Pandas] 컬럼명 변경하기/ 순서바꾸기 (0) | 2022.10.22 |
[차원축소와 군집분석] NMF : Non-negative Matrix Factorization (0) | 2022.10.04 |
[Python] 클래스 : 상속(Inheritance) (0) | 2022.08.29 |
[Python] 웹크롤링? 웹 스크래핑 (0) | 2022.08.28 |