How We Coding

<3-3> JSON

Language/Python2018. 3. 5. 22:34

동영상 강의 : http://pythonkim.tistory.com/notice/77


# Day_03_03_json.py


- 파이선에서는 json 모듈이 있다.


1
import json
cs


http://www.jsontest.com 에 접속해보자


- JSON : JavaScript Object Notation 의 약자.


>> Object 를 문자열로 변환하고, 그 문자열을 다시 Object 로 복원하는 방법.


-


1
j1 = '{"ip": "8.8.8.8"}'

cs

 

>> dictionary 를 포장하고 있는 문자열.

>> 우리는 이것을 dictionary 로 변환할 수 있다. dictionary 가 들어있기 때문..!!


-

1
2
3
4
5
6
7
import json
 
j1 = '{"ip": "8.8.8.8"}'
d1 = json.loads(j1)
print(d1)           # {'ip': '8.8.8.8'}
print(type(d1))     # <class 'dict'>
print(d1['ip'])     # 8.8.8.8
cs



>> 4 : json.loads() 를 통해 json 형태의 문자열을 읽어올 수 있다.

>> json.load() 는 파일로부터 읽어올 때 사용한다.



# 문제

# j2를 해석해서 value 를 출력하기


1
2
3
4
5
6
7
8
9
10
11
12
j2 = '''{
   "Accept-Language": "en-US,en;q=0.8",
   "Host": "headers.jsontest.com",
   "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}'''
 
d2 = json.loads(j2)
print(type(d2))     # <class 'dict'>
 
for k, v in d2.items():
    print(k, v)
cs


>> 실행결과

1
2
3
4
Accept-Language en-US,en;q=0.8
Host headers.jsontest.com
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
cs



- json.dumps()


1
2
3
j3 = json.dumps(d2)
print(type(j3))
print(j3)
cs


>> 실행결과


1
2
<class 'str'>
{"Accept-Language": "en-US,en;q=0.8", "Host": "headers.jsontest.com", "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
cs


>> object 를  str 로 변환한다.




- 이전에 만든 kma.csv 파일을 열어보자. (기본적으로 엑셀과 연동이 된다.)

>> 인코딩 문제로 글자가 깨지는 경우


1
= open('Data/kma.cvs''w', encoding='utf-8')
cs


>> 여기에서 인코딩을 지우면 된다고 하는데, 맥에서는 안된다...


...




# Day_03_04_json_kma.py



1
2
3
4
5
6
7
8
9
10
import json
import requests
 
url = 'http://www.kma.go.kr/DFSROOT/POINT/DATA/top.json.txt'
recvd = requests.get(url)
 
print(recvd.text)
 
text = bytes(recvd.text, 'iso-8859-1').decode('utf-8')
print(text)
cs


>> 실행결과


1
2
[{"code":"11","value":"서울특별시"},{"code":"26","value":"부산광역시"},{"code":"27","value":"대구광역시"},{"code":"28","value":"인천광역시"},{"code":"29","value":"광주광역시"},{"code":"30","value":"대전광역시"},{"code":"31","value":"울산광역시"},{"code":"41","value":"경기도"},{"code":"42","value":"강원도"},{"code":"43","value":"충청북도"},{"code":"44","value":"충청남도"},{"code":"45","value":"전라북도"},{"code":"46","value":"전라남도"},{"code":"47","value":"경상북도"},{"code":"48","value":"경상남도"},{"code":"50","value":"제주특별자치도"}]
[{"code":"11","value":"서울특별시"},{"code":"26","value":"부산광역시"},{"code":"27","value":"대구광역시"},{"code":"28","value":"인천광역시"},{"code":"29","value":"광주광역시"},{"code":"30","value":"대전광역시"},{"code":"31","value":"울산광역시"},{"code":"41","value":"경기도"},{"code":"42","value":"강원도"},{"code":"43","value":"충청북도"},{"code":"44","value":"충청남도"},{"code":"45","value":"전라북도"},{"code":"46","value":"전라남도"},{"code":"47","value":"경상북도"},{"code":"48","value":"경상남도"},{"code":"50","value":"제주특별자치도"}]
cs


>> text 데이터는 딕셔너리 리스트의 형태이다..!!


>> 인코딩이 깨지는 것에 대한 해결책은 9번 라인으로 해결.

>> 4 라인의 url 을 브라우저에서 직접 실행시 json 형식의 내용을 그대로 확인할 수 있다. (맥에서는 여전히 깨져서 나온다..ㅜ)



< JSON 에서의 기본 규칙 >

- 맨 처음 나오는 것은 최상위 객체로 배열(파이썬에서는 리스트) 아니면 사전의 형태.

- int 값을 json 으로 전달할 수 없다.



# 문제

# 코드와 도시 이름만 출력해 보기.


1
2
3
4
5
6
items = json.loads(text)
print(items)
print(type(items))   # <class 'list'>
 
for item in items:
    print(item['code'], item['value'])
cs


>> 실행결과


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[{'code': '11', 'value': '서울특별시'}, {'code': '26', 'value': '부산광역시'}, {'code': '27', 'value': '대구광역시'}, {'code': '28', 'value': '인천광역시'}, {'code': '29', 'value': '광주광역시'}, {'code': '30', 'value': '대전광역시'}, {'code': '31', 'value': '울산광역시'}, {'code': '41', 'value': '경기도'}, {'code': '42', 'value': '강원도'}, {'code': '43', 'value': '충청북도'}, {'code': '44', 'value': '충청남도'}, {'code': '45', 'value': '전라북도'}, {'code': '46', 'value': '전라남도'}, {'code': '47', 'value': '경상북도'}, {'code': '48', 'value': '경상남도'}, {'code': '50', 'value': '제주특별자치도'}]
<class 'list'>
11 서울특별시
26 부산광역시
27 대구광역시
28 인천광역시
29 광주광역시
30 대전광역시
31 울산광역시
41 경기도
42 강원도
43 충청북도
44 충청남도
45 전라북도
46 전라남도
47 경상북도
48 경상남도
50 제주특별자치도
cs

 




'Language > Python' 카테고리의 다른 글

<3-4> __name__, 리스트 슬라이싱  (0) 2018.03.08
<3-2> Set 과 Dictionary  (0) 2018.03.02
<3-1> 파일 입출력  (0) 2018.02.23
<2-3> 기상청의 전국 날씨정보 파싱, 외부 모듈 추가  (0) 2018.02.22
<2-2> 리스트, 튜플  (0) 2018.02.15