python을 활용하여 json 데이터 받아오기 (df 변환)

2023. 8. 28. 17:17·python
728x90

안녕하세요

오늘은 Python을 활용하여 Json 데이터를 받아오는 걸 진행해보도록 하겠습니다.

JSON이란?

JSON은 개발자가 데이터를 저장하고 전송하는 데 사용하는 사람이 읽을 수 있는 데이터 교환 형식입니다. JSON은 JavaScript Object Notation의 약어이며 "Jason"으로 발음됩니다.

JSON은 언어 독립적입니다. 즉, 특정 프로그래밍 언어가 필요하지 않습니다 . 이는 JavaScript 와의 연관성에도 불구하고 놀랍게 보일 수 있습니다. (JSON 형식은 JavaScript 개체 리터럴에서 영감을 얻었습니다)
따라서 하나의 프로그래밍 언어로 JSON 메시지를 구성하고 전송하며 다른 프로그래밍 언어로 해당 메시지를 분해하고 읽는 것이 가능합니다.

JSON은 어떤 데이터 유형을 지원할까?

JSON의 구문은 텍스트 기반이며, 객체, 배열, 문자열 및 숫자 와 같은 데이터 유형을 지원합니다.
JSON객체는 키가 문자열이야아하고 값은 지원되는 데이터 유형 중 하나일 수 있는 키 - 값(Key-Value) 쌍으로 구성 됩니다.

JSON은 오늘날 웹 어디에서나 찾을 수 있으며 RESTful API와 함께 사용하는 데 널리 사용되는 데이터 형식입니다. API는 내부 및 외부 사용을 위해 구현될 수 있으며 JSON을 읽고 반환하도록 설계되었습니다.

 

 

 

RESTful API란?

API(Application Programming Interface)란? API를 본격적으로 알아보기 전에, 비유를 들어 쉽게 설명을 도와드리겠습니다. 여러분이 멋진 레스토랑에 있다고 가정해봅시다. 점원이 가져다준 메뉴판을 보면

balang.tistory.com

 

그럼 바로 코드로 확인 해보겠습니다.

import json
import requests
import pandas as pd

key = '키 값을 넣어주시면 됩니다.'
url = f'https://apis.data.go.kr/B551011/GoCamping/basedList?serviceKey={key}&numOfRows=10000&pageNo=1&MobileOS=ETC&MobileApp=AppTest&_type=json'

requestsData = requests.get(url)

if requestsData.status_code == 200:
    responseData = requestsData.json()
else:
    print("Error : ", requestsData.status_code)

result = responseData['response']['body']['items']['item']
total_count = responseData['response']['body']['totalCount']

df = pd.DataFrame(result)
# df = pd.json_normalize(data['results'])

Python은 import requests으로 받아올 수 있습니다.

 

requestsData = requests.get(url) .get을 통해서 json format 형태로 되어 있는 url을 넣어준 후
status_code를 확인 해 200이면 responseData를 받아오고 만일 200일 아닐 경우 else로 처리해주었습니다.

 

 

Status code 정리 (100 ~ 500)

HTTP 상태 코드(Status code)란? 사용자가 웹 브라우저를 통해 웹 서버에 어떠한 요청을 할 경우, 웹 서버는 요청에 대한 응답으로 아래와 같은 HTTP 상태 코드를 나타낸다. 응답은 HTTP 요청이 성공했는

balang.tistory.com

 

받아온 데이터는 json 형식 마다 다르겠지만 [''] 를통해서 내부로 접근 할 수 있어서 내가 원하는 데이터를 추출할 수 있습니다.

 

그리고 데이터가 정리만 잘 되어 있다면 바로 df = pd.DataFrame(result) df화로 만들 수 있도 있습니다.

 

데이터 마다 다르겠지만 for을 활용해서 정리 한 후 df로 만들어 줄 수도 있고 아니면

df = pd.json_normalize(data['results']) 통해서 df화를 시킬 수도 있습니다.

 

import json을 사용하지 않고 불러올 수 있는 방법이 하나 더 있습니다.

 

바로 urllib.requests 사용 하는 방법입니다.

 

사용 방법은 아래 코드로 확인해보겠습니다.

import urllib.request
import json

request = urllib.request.Request(url)
response = urllib.request.urlopen(request)

status_code = response.getcode()

if (status_code == 200):
  response_body = response.read()
  response_json = json.loads(response_body)
else:
  print("Error Code : " + status_code)

result = response_json

requests와 urllib.requests의 차이는
requests는 데이터를 전송할 때 딕셔너리 형태로 보내는 반면 urllib.requests의 경우 인코딩을 통해 바이너리 형태로 전송합니다.


또한 requests의 경우에는 없는 페이지의 경우에 에러를 띄우지 않는 반면 urllib.requests는 에러를 보여줍니다.

 

개인적으로는 실무를 하면서 urllib.requests보다는 requests를 많이 사용했습니다.

 

각각의 상황에 맞게 잘 사용하시기 바랍니다.

감사합니다.

728x90
반응형

'python' 카테고리의 다른 글

Python에서 JavaScript 실행하기: V8 엔진 임베딩 실무 경험기  (1) 2025.07.23
[python] BeautifulSoup header 설정 방법  (0) 2024.02.19
python list element count (collections.Counter)  (0) 2023.11.15
python list unique 값 확인 하는 방법  (0) 2023.11.15
'python' 카테고리의 다른 글
  • Python에서 JavaScript 실행하기: V8 엔진 임베딩 실무 경험기
  • [python] BeautifulSoup header 설정 방법
  • python list element count (collections.Counter)
  • python list unique 값 확인 하는 방법
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (160)
      • python (47)
        • selenium (4)
        • algorithm (10)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (36)
      • Data Scientist (3)
      • Data Analysis (11)
      • Computer Science (36)
      • Why? (16)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
python을 활용하여 json 데이터 받아오기 (df 변환)
상단으로

티스토리툴바