JSON (JavaScript Object Notation)
JSON은 좀 더 쉽게 데이터를 교환하고 저장하기 위하여
만들어진 텍스트 기반의 데이터 교환 표준이다.
> 서버→클라이언트 : JSON 이해하기!
1. 서울시 OpenAPI 접속하기
http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99
2. 크롬 익스텐션 JSONView를 설치해보기! 설치하면 좀 더 이쁘게 JSON을 볼 수 있다.
https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=ko
JSONVue
Validate and view JSON documents
chrome.google.com
3. JSON은, Key:Value로 이루어져 있다. 자료형 Dictionary와 아주 유사하다.
RealtimeCityAir라는 키 값에 딕셔너리 형 value가 들어가 있고,
그 안에 row라는 키 값에는 리스트형 value가 들어가 있다.
> 클라이언트→서버: GET 요청 이해하기
API는 은행 창구와 같은 것!
같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라
가져와야 하는 것/처리해주는 것이 다른 것처럼,
클라이언트가 요청할 때에도, "타입"이라는 것이 존재한다.
*GET → 통상적으로 데이터 조회(Read)를 요청할 때
예) 영화 목록 조회
*POST → 통상적으로 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때
예) 회원가입, 회원탈퇴, 비밀번호 수정
이 중에서 GET방식 알아보기!
> GET
https://movie.naver.com/movie/bi/mi/basic.nhn?code=161967
위 주소는 크게 두 부분으로 쪼개진다. 바로 "?"가 쪼개지는 지점이다.
"?" 기준으로 앞부분이 <서버 주소>, 뒷부분이 [영화 번호]
- 서버 주소 : https://movie.naver.com/movie/bi/mi/basic.nhn
- 영화 정보 : code=161967
GET 방식으로 데이터를 전달하는 방법
? : 여기서부터 전달할 데이터가 작성된다는 의미
& : 전달할 데이터가 더 있다는 뜻
ex) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8
위 주소는 google.com의 search 창구에 다음 정보를 전달한다.
q=아이폰 (검색어)
sourceid=chrome (브라우저 정보)
ie=UTF-8 (인코딩 정보)
Ajax
Ajax는 그 자체가 별도의 새로운 언어는 아닙니다.
HTML, CSS, 자바스크립트, DOM, XML 등 기존에 사용되던 여러 기술을
함께 사용하는 새로운 개발 기법이다.
1. Ajax 시작하기
참고!
Ajax는 jQuery를 임포트한 페이지에서만 동작 가능하다.
//jQuery를 import 합니다
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
Ajax 기본 골격
$.ajax({
type: "GET", // GET 방식으로 요청한다.
url: "여기에 url을 입력",
data: {}, // 요청하면서 함께 줄 데이터 (GET 요청시엔 비워두세요)
success: function(response){ // 서버에서 준 결과를 response라는 변수에 담음
console.log(response) // 서버에서 준 결과를 이용해서 나머지 코드를 작성
}
})
GET 요청은, url뒤에 아래와 같이 붙여서 데이터를 가져간다.
http://naver.com?param=value¶m2=value2
POST 요청은, data : {} 에 넣어서 데이터를 가져간다.
data: { param: 'value', param2: 'value2' },
success: 성공하면, response 값에 서버의 결과 값을 담아서 함수를 실행한다.
2. Ajax 통신의 결괏값 이용해 보기
서울시 OpenAPI
http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99
> 모든 구의 미세먼지 값을 찍어보기
1. 미세먼지 데이터가 어디에 있는지 찾기
값은 RealtimeCityAir → row에 미세먼지 데이터가 들어있다.
이걸 꺼내보자!
$.ajax({
type: "GET",
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {},
success: function (response) {
let mise_list = response["RealtimeCityAir"]["row"]; // 꺼내는 부분!
console.log(mise_list);
}
})
콘솔로 확인하면 아래처럼 나온다.
2. 반복문으로 구 데이터를 출력해보기
row의 값을 mise_list에 담았으니, 반복문을 이용해보자
$.ajax({
type: "GET",
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {},
success: function (response) {
let mise_list = response["RealtimeCityAir"]["row"]; // 꺼내는 부분!
for (let i = 0; i < mise_list.length; i++) {
let mise = mise_list[i];
console.log(mise);
}
}
})
콘솔 값 확인
3. 구 데이터에서 구 이름, 미세먼지 수치를 골라내어 출력하기
구 이름 키 값인 "MSRSTE_NM", 미세먼지 수치 키값인 "IDEX_MVL"의 밸류를 출력
$.ajax({
type: "GET",
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {},
success: function (response) {
let mise_list = response["RealtimeCityAir"]["row"]; // 꺼내는 부분!
for (let i = 0; i < mise_list.length; i++) {
let mise = mise_list[i]
let gu_name = mise["MSRSTE_NM"]
let gu_mise = mise["IDEX_MVL"]
console.log(gu_name,gu_mise)
}
}
})
콘솔 값 확인
Ajax 연습하기 (1)
서울시 OpenAPI(실시간 따릉이 현황) 이용하기
따릉이 대수가 5대 미만인 곳은 빨갛게 보여주기
1. "getStationList" → "row"값 꺼내오기
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/seoulbike",
data: {},
success: function (response) {
let rows = response["getStationList"]["row"]
}
})
2. for문으로 "stationName", "rackTotCnt", "parkingBikeTotCnt" 꺼내기
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/seoulbike",
data: {},
success: function (response) {
let rows = response["getStationList"]["row"]
for(i = 0; i < row.length; i++){
let name = rows[i]['stationName']
let rack = rows[i]['rackTotCnt']
let bike = rows[i]['parkingBikeTotCnt']
}
}
})
3. html 만들어서 붙여주기
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/seoulbike",
data: {},
success: function (response) {
let rows = response["getStationList"]["row"]
for(i = 0; i < row.length; i++){
let name = rows[i]['stationName']
let rack = rows[i]['rackTotCnt']
let bike = rows[i]['parkingBikeTotCnt']
let temp_html = `<tr>
<td>${name}</td>
<td>${rack}</td>
<td>${bike}</td>
</tr>`
$('#names-q1').append(temp_html)
}
}
})
4. 따릉이 대수가 5대 미만인 곳은 빨갛게 보여주기
<style>
.urgent {
color: red;
}
</style>
<script>
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/seoulbike",
data: {},
success: function (response) {
let rows = response["getStationList"]["row"]
for(i = 0; i < row.length; i++){
let name = rows[i]['stationName']
let rack = rows[i]['rackTotCnt']
let bike = rows[i]['parkingBikeTotCnt']
let temp_html = ``
if (bike < 5) {
let temp_html = `<tr class="urgent">
<td>${name}</td>
<td>${rack}</td>
<td>${bike}</td>
</tr>`
}else {
let temp_html = `<tr>
<td>${name}</td>
<td>${rack}</td>
<td>${bike}</td>
</tr>`
}
$('#names-q1').append(temp_html)
}
}
})
</script>
(1) <style>에 .urgent 만들어주고 색상 red를 준다.
(2) let temp_html = `<tr class="urgent"> 해준다.
(3) if 문으로 bike < 5 이면 빨갛게 나올 수 있게 만들어준다.
결과
Ajax 연습하기 (2)
이미지 바꾸기 : $("#아이디값").attr("src", 이미지URL);
텍스트 바꾸기 : $("#아이디값").text("바꾸고 싶은 텍스트");
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/rtan",
data: {},
success: function (response) {
let url = response['url']
let msg = response['msg']
$('#img-rtan').attr('src',url)
$('#text-rtan').text(msg)
}
})
}
풀코드
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>JQuery 연습하고 가기!</title>
<!-- JQuery를 import 합니다 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<style type="text/css">
div.question-box {
margin: 10px 0 20px 0;
}
div.question-box > div {
margin-top: 30px;
}
</style>
<script>
function q1() {
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/rtan",
data: {},
success: function (response) {
let url = response['url']
let msg = response['msg']
$('#img-rtan').attr('src',url)
$('#text-rtan').text(msg)
}
})
}
</script>
</head>
<body>
<h1>JQuery+Ajax의 조합을 연습하자!</h1>
<hr/>
<div class="question-box">
<h2>3. 르탄이 API를 이용하기!</h2>
<p>아래를 르탄이 사진으로 바꿔주세요</p>
<p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
<button onclick="q1()">르탄이 나와</button>
<div>
<img id="img-rtan" width="300" src="http://spartacodingclub.shop/static/images/rtans/SpartaIcon11.png"/>
<h1 id="text-rtan">나는 ㅇㅇㅇ하는 르탄이!</h1>
</div>
</div>
</body>
</html>
위에 글 내용은 오류 사항이 존재할 수 있습니다!
수정 사항이 있을 시 알려주시면 감사하겠습니다.
'내일배움단 개발일지' 카테고리의 다른 글
8. 3주차 - 파이썬 (설치, 기초) (0) | 2022.08.12 |
---|---|
7. 2주차 - 숙제 (0) | 2022.08.11 |
5. 2주차 - JQuery (0) | 2022.08.09 |
4. 1주차 - 숙제 (0) | 2022.08.08 |
3. 1주차 - JavaScript (0) | 2022.08.07 |
댓글