지난번에 도로명주소 전자지도 데이터를 사용하기 위해서 shp -> json 형식의 파일로 변환해 주었다.
thalals.tistory.com/24?category=476043
이제 이 GeoJson 파일을 파싱하여 원하는 데이터만 사용할려고 한다.
그전에 JSON에 대해서 정리를 해보자
1. Json이란
Json이란, JavaScript Object Notation으로 데이터를 주고받을 때 사용되는 포맷 중 하나이다.
본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷으로,
프로그래밍 언어나 플랫폼에 독립적이어서 C, C++, C#, JAVA, Python 등 여러 프로그래밍 언어에서 사용할 수 있다.
json은 key:value 타입으로 데이터를 표현하며, Object와 Array가 있다.
1) Object
object는 key/ value로 표현되고 { } 중괄호로 시작과 끝을 나타낸다.
{
"key1": "value1",
"key2": "value2"
}
2) array
array는 [ ]대괄호로 구분되고 각 요소는 기본 자료형이나 배열, 객체가 될 수 있다.
[ "value1", "value2", "value3" ]
이런식으로 object와 array를 혼합하여 데이터를 표현하면 프로그래밍 언어와 플랫폼에 독립적이기 때문에
서로 다른 시스템 간에 통신을 하기에 용이합니다.
3) 직렬화 (Serialization)
이렇게 데이터를 JSON형식으로 만드는것을 직렬화라고도 하는데,
직렬화란 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미한다.
객체들의 데이터를 특정한 포맷의 연속적인 데이터로 변형하여 데이터를 읽도록 하는 것이다.
2. DJango에서 Json 데이터 파싱하기(Python)
먼저 이용할 json 파일들을 Static 폴더에 저장해 주었습니다.
1) with문과 json모듈을 이용하여 파싱
woohoo.log blog를 참고하였습니다.
with와 json 모듈을 이용해 Json파일 불러오기
(json 파일은 Static폴더 안에 Json폴더에 위치)
import json
#경기 라인 json 파일 보기
# with를 이용해 파일을 연다.
cordinate_Array = []
def jsonShow_Gline():
#with와 json 모듈을 이용해 Json파일 불러오기
with open('static/json/Gyeonggi_line.json', encoding='utf-8') as json_file:
json_data = json.load(json_file)
#json의 key로 접근
#json_line : json 객체를 가지는 Array
json_line = json_data['features']
for a in json_line:
cordinate_Array.append(a['geometry']['coordinates'])
jsonShow_Gline()
print(cordinate_Array[0])
print(len(cordinate_Array))
먼저 json 파일에서 필요한 데이터만을 뽑았습니다.
제가 가진 json파일은 object 안에 Array 형식으로 되어 있기 때문에
위와 같은 방식으로 접근을 하였고 cordinate_Array에 데이터가 정상적으로 들어가는 것을 확일할 수 있었습니다.
여기서 저는 추가로 도로구간(TL_SPRD_MANAGE) 데이터중 사람이 다닐 수 있는 길(도보)만 사용하기 위해
1. 고속도로 와 대로를 제거해 주었습니다.
import json
#경기 라인 json 파일 보기
# with를 이용해 파일을 연다.
coordinates_Array = [] #전체
coordinates_part = [] # 고속도로와 대로를 제거한 길
def jsonShow_Gline():
#with와 json 모듈을 이용해 Json파일 불러오기
with open('static/json/Gline_result_data.geojson', encoding='utf-8') as json_file:
json_data = json.load(json_file)
#json의 key로 접근
#json_line : json 객체를 가지는 Array
json_line = json_data['features']
for a in json_line:
if(a['properties']['ROA_CLS_SE']=='3' or a['properties']['ROA_CLS_SE']=='4' ): #고속도로와 대로 제거
coordinates_part.append(a['geometry']['coordinates'])
coordinates_Array.append(a['geometry']['coordinates'])
jsonShow_Gline()
print("경기도 전체 라인\n첫번째 배열 : ",coordinates_Array[0])
print("전체 길이 : ",len(coordinates_Array))
# print("고속도로, 대로 제거 라인\n첫번째 배열 : ",coordinates_part[0])
print("제거 라인 길이 : ",len(coordinates_part))
'Django > 응용' 카테고리의 다른 글
[Django] 외부 자바스크립트 jquery ajax 통신 csrf token 설정하기 (0) | 2021.08.30 |
---|---|
[Django 게시판] 3. 카카오 지도 맵 api 생성하기(Kakao map api) (0) | 2021.06.14 |
[Django 게시판] 2.CBV를 FBV로 (CRUD-Create) (0) | 2021.06.13 |
[Django 게시판] 1. generic View를 이용한 CRUD (0) | 2021.06.13 |
Django에 MySQL 연동하기 (DB 연동) (0) | 2021.05.19 |