{"list":[{"svarAddr":"경기도 시흥시 서울외곽순환고속도로 105-1","routeCd":"1000","routeNm":"수도권제1순환선","svarCd":"000531","svarNm":"시흥하늘(일산)주유소","hdqrCd":"200000","hdqrNm":"수도권본부","mtnofCd":"210800","mtnofNm":"시흥","svarGsstClssCd":"1","svarGsstClssNm":"주유소","gudClssCd":"0","gudClssNm":"상행","pstnoCd":"14983 ","cocrPrkgTrcn":"0","fscarPrkgTrcn":"0","dspnPrkgTrcn":"0","bsopAdtnlFcltCd":"B00215","rprsTelNo":"031-481-8147"},{"svarAddr":"경기도 시흥시 서울외곽순환고속도로 106","routeCd":"1000","routeNm":"수도권제1순환선","svarCd":"000532","svarNm":"시흥하늘(판교)주유소","hdqrCd":"200000","hdqrNm":"수도권본부","mtnofCd":"210800","mtnofNm":"시흥","svarGsstClssCd":"1","svarGsstClssNm":"주유소","gudClssCd":"1","gudClssNm":"하행","pstnoCd":"14983 ","cocrPrkgTrcn":"0","fscarPrkgTrcn":"0","dspnPrkgTrcn":"10","bsopAdtnlFcltCd":"B00216","rprsTelNo":"0314818149"},{"svarAddr":"경기 시흥시 조남동 서울외곽순환고속도로","routeCd":"1000","routeNm":"수도권제1순환선","svarCd":"000530","svarNm":"시흥하늘휴게소","hdqrCd":"200000","hdqrNm":"수도권본부","mtnofCd":"210800","mtnofNm":"시흥","svarGsstClssCd":"0","svarGsstClssNm":"휴게소","gudClssCd":"0","gudClssNm":"상행","pstnoCd":"14983 ","cocrPrkgTrcn":"0","fscarPrkgTrcn":"0","dspnPrkgTrcn":"0","bsopAdtnlFcltCd":"A00268","rprsTelNo":"0314819715"}],"count":3,"message":"인증키가 유효합니다.","code":"SUCCESS"}
오픈 API를 통해 정보를 json 형식으로 불러왔다. 이제 이 정보를 python을 통해서 내가 원하는 형태로 가공하고 웹 뷰 상에 가공한 형태로 보여주는 방식을 고민해 봐야 할 것 같다.
여기서 잠깐! json이란?
1. json이란?
json은 데이터 교환할 때 많이 쓰는 일종의 형식(약속)이다. 위 양식을 보면 "svarAddr": "경기도 시흥시 서울외곽순환고속도로 105-1" 형태로 한 쌍씩 표시가 되는데 여기서 svarAddr을 키, 경기도 ~ 105-1를 값이라고 한다.
변수 설명을 보면 svarAddr은 휴게소 주소라는 것을 알 수 있다.
2. json 파싱
이제부터는 많이 어려울 것 같아서 긴장되지만 제미나이에게 질문했더니 python 라이브러리를 이용해서 파싱할 수 있다고 한다.
import json
with open('log.json', 'r') as f:
data = json.load(f)
# 로그 데이터 처리
for log in data:
print(log['timestamp'], log['message'])
봐도 모르겠어서 json 데이터를 그대로 전달해주고 이걸 파싱할 수 있는 python 코드를 공손하게 다시 부탁해본다.
import json
# JSON 데이터 로드
with open('data.json', 'r') as f:
data = json.load(f)
# "list" 키의 값 추출
data_list = data['list']
# 모든 키-값 쌍 출력
for item in data_list:
for key, value in item.items():
print(f"{key}: {value}")
# 특정 키의 값만 출력
# for item in data_list:
# print(f"주소: {item['svarAddr']}")
# print(f"상호명: {item['svarNm']}")
위 코드를 가지고 실행하는데, 계속 오류가 발생해서 30분 동안 헤맸다.
1) json 파일을 불러와야 하는데, 뒤에 확장자(.json)을 함께 써야 하는지 몰라서 계속 오류가 났었다.
2) data.json으로 호출을 했으나 인코딩 방식을 UTF8로 변경해야 했다.
import json
# JSON 데이터 로드
with open('0211_1.json', 'r', encoding='UTF8') as f:
data = json.load(f)
# "list" 키의 값 추출
data_list = data['list']
# 모든 키-값 쌍 출력
for item in data_list:
for key, value in item.items():
print(f"{key}: {value}")
# 특정 키의 값만 출력
# for item in data_list:
# print(f"주소: {item['svarAddr']}")
# print(f"상호명: {item['svarNm']}")
위처럼 확장자 명/인코딩을 변환해서 실행했더니 원하는 정보가 불러와졌다.
모든 키-값 정보가 필요하지는 않아서 휴게소 명(svarNm), 휴게소 코드(svarCd), 휴게소 주소(svarAddr)만 불러와 보겠다!
# JSON 데이터 로드
with open('0211_1.json', 'r', encoding='UTF8') as f:
data = json.load(f)
# "list" 키의 값 추출
data_list = data['list']
# 특정 키의 값만 출력
for item in data_list:
print(f"휴게소 명: {item['svarNm']}")
print(f"휴게소 코드: {item['svarCd']}")
print(f"휴게소 주소: {item['svarAddr']}")
실행시켰더니 휴게소 명, 휴게소 코드, 휴게소 주소만 정보가 잘 불러와진다.
그럼 이제 이 정보를 확인할 수 있는 웹 페이지를 만들어야 할 것 같다. 근데 이걸 하려면 웹 페이지를 만들기 전에 호스팅을 어디선가 해야 하는 거 아녀?
구글링을 해보자!
3. 로컬 컴퓨터에 웹 서버에 구축하려다가 급 마무리
API 호출되는 거 보고, html 코드로 '하늘'을 검색했을 때 휴게소 명에 '하늘'이 포함된 로그만 조회되도록 어찌저찌 구글링을 엄청 해서 시도했는데, 무슨 CORS 정책(?)에서 막혔다.
이거때문에 2시간 넘게 고민했는데 결국 해결을 못해서 우선 저장해두고 잠시 태업합니다.
개발자님들 돈 많이 버시고, 항상 감사합니다^^;;
앞으로도 잘 부탁드립니더