강의목표
1. json 형식을 이용한 파일 입출력을 구현하고 실행할 수 있다.
2. 웹페이지 연동에 관한 구문을 확인하고 실행할 수 있다.
3. 정적페이지 연동을 이해하고 실행할 수 있다.
이번 수업은 내일까지 아마 이어질듯하다. java, tomcat, IDLE설치 등등...
============================================================================
Json(JavaScript Object Notation) : 데이터 교환용으로 설계된 경량 텍스트 기반 개방형 표준
- JavaScript 객체표기법을 의미하고 Json공식 인터넷 미디어 타입(마인타입?)은
application/json이고 .json 확장자를 가진다.
- xml은 데이터를 파싱하기 위해 메모리에 모두 올려놓고 작업을 하는데 데이터양이 많을 경우
파싱작업에 부하가 걸리거나 파싱에 실패할 경우도 있기 때문에 Json을 사용하게 된다.
- c, c++, java, python, perl 등을 포함한 규칙을 사용하게 된다.
- 브라우저 확장 프로그램 또는 웹사이트를 포함하는 javascript기반 응용프로그램을 작성할 때 사용
- Json 형식은 네트워크 연결을 통해 구조화 된 데이터를 직렬화 및 전송하는데 사용되며
주로 서버와 web 응용 프로그램 간에 데이터를 전송하는데 사용
- web 서비스와 API는 공개 데이터를 제공하기 위해 Json 형식을 사용
============================================================================
Json 특징
1. 텍스트 기반이라 읽고 쓰는 것이 간단함
2. 프로그램 언어와 플랫폼에 독립적이므로 서로 다른 시스템간에 객체를 교환
3. JS문법을 사용
4. Json 전용 파서 기능을 웹 브라우저에 내장하고 있음
5. 데이터포맷 xml보다 가볍고 빠름
6. 통신 프로토콜을 실행함
7. xml 데이터는 모두 string인 반면 Json은 타입을 가진다
============================================================================
json의 주요 메소드
1. dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True,
cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
- 객체를 dict/list로 변환해서 지정된 파일에 문자열로 저장한다.
2. dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None,
indent=None, separators=None, default=None, sort_keys=False, **kw)
- 객체를 dict/list로 변환해서 문자열로 리턴한다.
3. load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None,
parse_constant=None, object_pairs_hook=None, **kw)
- 파일에서 json형식을 로드해서 python dict/list로 읽어온다.
4. loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None,
parse_constant=None, object_pairs_hook=None, **kw)
- json형식을 로드해서 python dict/list로 읽어온다.
json.dumps, json.loads(파일 X)
import json
def test01():
obj_json = '{"str":[42.2], "str01":42}' # 파이썬은 문자열 만들 때 \', \" 둘 다 상관없는데 json은 key값으로 오직 \"만을 받는다.
obj = json.loads(obj_json)
print(obj, type(obj))
obj = [{'a': "A", 'b': (2, 4), 'c': 3.0}]
data_string = json.dumps(obj)
print(data_string, type(data_string))
test01()
#result
{'str': [42.2], 'str01': 42} <class 'dict'>
[{"a": "A", "b": [2, 4], "c": 3.0}] <class 'str'>
# 7번줄에서 obj의 키 값은 '로 줬지만 json으로 dump할 때 "로 변환 됨
json.dump, json.load(파일 O)
import json
def test02():
obj_json = {"str": [42.2], "str01": 42, "str02": "대한민국"}
file_name = "data.json"
# 파일에 쓰기
with open(file_name, "w") as f:
json.dump(obj_json, f)
# 파일에서 읽어오기
with open(file_name) as f:
result = json.load(f)
print(result)
test02()
#result
{'str': [42.2], 'str01': 42, 'str02': '대한민국'}
json.loads(json_string, object_hook=class_name)
import json
s = '{"name": 1234, "family": ["mom", "dad", "brother"], "country": "대한민국"}'
class test: # 3. d = s
def __init__(self, d): # __dict__는 dict 타입을 클래스의 속성처럼 접근 가능하게 해준다.
self.__dict__ = d
if __name__ == '__main__':
data = json.loads(s, object_hook=test) # object_hook은 json.load로 dict 객체를 만들고 class 만들어서 __dict__에 넣을걸 한번에 하는 작업으로 이해
print(type(data))
print(data.name)
print(data.family)
print(data.country)
#result
<class '__main__.test'>
1234
['mom', 'dad', 'brother']
대한민국
============================================================================
1. json 모듈로 student.json 파일을 읽어오자
2. Object_hook Student 클래스를 만들어서 데이터를 대입한다
3. 이름 : 총점으로 출력한다 ex) Ruse : 270점
student.json
{"STUDENT" :
[
{"NAME" :"Dominica","SCORE" : {"KOR":10,"ENG":20,"MATH":30}},
{"NAME" :"Dominico","SCORE" :{"KOR": 90,"ENG":40, "MATH":100}},
{"NAME" :"RuRe","SCORE" :{"KOR": 90,"ENG":90, "MATH":90}}
]
}
import json
class Student:
def __init__(self, data):
self.__dict__ = data
def prn():
with open("student.json") as f:
data = json.load(f, object_hook=Student)
for my in data.STUDENT:
sum_score = my.SCORE.KOR + my.SCORE.ENG + my.SCORE.MATH
print(f"{my.NAME} : {sum_score}")
prn()
#result
Dominica : 60
Dominico : 230
RuRe : 270
============================================================================
[번외 1]
MEAN stack : MongoDB, Express.js, AngularJS, Node.js
MongoDB - document database
Express(.js) - Node.js web framework
Angular(.js) - a client-side JavaScript framework
Node(.js) - the premier JavaScript web server
============================================================================
[번외 2]
웹 서비스(Web Service)
네트워크 상에서 서로 다른 종류의 컴퓨터들간에 상호 작용을 하기 위한 서비스 지향적
분산 컴퓨팅 기술의 일종으로 SOAP, WSDL, UDDI 등의 주요 표준 기술로 이루어진 소프트웨어 시스템
- 웹 서비스에서 네트워크 상에서 메시징 작업을 이용해서 DATA를 전송하게 되는데 웹 상에서
데이터를 교환하는 방법은 두 가지 형식을 많이 사용한다.
- 문서형식 (Document -style)을 이용해서 데이터를 교환하는 xml(eXtensible Markup Language),
dict, list 혹은 내부 정보를 프로그램으로 서로 교환할 때 사용하는 Json이 있다.
구성요소
- SOAP : Simple Object Access Protocol
XML과 Http 등의 프로토콜을 기본으로 하여 다른 컴퓨터에 있는 데이터나 서비스를
호출하기 위한 통신규약
- WSDL : Web Service Description Language
웹 서비스에서 제공하는 기능들(서비스)을 외부에서 이용할 수 있도록 그 사용법을 알려주는
인터페이스로 xml 기반으로 작성된다.
- UDDI : Universal Description, Discovery and Intergration
개방형 표준과 비독점적인 기술을 기반으로 개발된 전역 비즈니스 레지스트리를 다양한
웹서비스를 사용자가 검색해서 사용할 수있는 요소이다.
============================================================================
[번외 3]
xml(eXtensible Markup Language) :
1998년에 w3c에서 표준으로 채택한 다목적 마크업 언어로 많은 곳에서 서비스를
메시징하고 있기 때문에 사용한다.
ex) 선진형 방재기상 정보 웹서비스, 기상예보, 기상특보 등의 정보를 제공
ex) 우편번호 API, 종추적 API, EMS 종추적 API
ex) 개별 웹사이트 소유자 및 개발자에게 웹서비스를 할 수 있게 제공되는 무료 플랫폼 등
'데이터과학자 - 강의 > python' 카테고리의 다른 글
210514 python - Open API (0) | 2021.05.14 |
---|---|
210512 python - Web crawling (0) | 2021.05.12 |
210507 python - built in function, 모듈 활용 (0) | 2021.05.07 |
210506 python - exception, decimal (0) | 2021.05.06 |
210503 python day-12 : file i/o (0) | 2021.05.04 |