본문 바로가기
내일배움단 개발일지

6. 2주차 - JSON, Ajax

by 새싹_v 2022. 8. 10.
728x90


 

 

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&param2=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>

 

 

 

위에 글 내용은 오류 사항이 존재할 수 있습니다!

수정 사항이 있을 시 알려주시면 감사하겠습니다.

728x90

'내일배움단 개발일지' 카테고리의 다른 글

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

댓글