JavaScript Object Notation
비동기통신에 사용하는 대표적인 데이터 교환 형식
Javascript의 object(객체)와 같이 key(속성)-value(값)가 묶여진 표기법을 사용
[
{
"title": "toystory",
"genre": ["animation","comic","kids"],
"age": 12
},
{
"title": "lalaland",
"genre": ["romance","musical"],
"age": 15
}
]
항상 fetch-than 문법을 사용
fetch('./data.json')
.then((response) => response.json())
.then((json) => {
x = json.items
html = '';
x.forEach(el => {
html += `<li></li>`;
});ㅣ
$('.list').html(html);
})
마크업에서 데이터 채워 넣을 부분
작성index.html
<ul class="list1"> <!-- <li> 이름:"홍길동",<br> 나이:20 </li> --> </ul>
html 마크업 작성
json의 데이터를 넣을 부분은 삭제
data.json
[ { "이름":"홍길동", "나이":20 }, { "이름":"김일일", "나이":5 }, { "이름":"김이이", "나이":80 }, { "이름":"김삼삼", "나이":19 } ]
필요한 데이터 작성
custom.js
fetch('./data.json') .then((response) => response.json()) .then((json) => { // let html = ''; json.forEach(human => { html += `<li>${human.이름} <br> ${human.나이}</li>`; }); // $('.list1').html(html); })
- fetch에 json 데이터 경로
- 재할당 가능한 변수 let사용
- html +=에 삭제한 마크업 양식 작성
element명을 human으로 지정
이름:"홍길동" = ${human.이름}
나이:20 = ${human.나이}- 데이터를 감싸는 ul태그 .list1 html(html)
위와 같은 html, json을 응용하여 json의 나이에 대해 데이터를 구분(성인/미성년자) 텍스트 띄우는 javascript 작성
fetch('./data.json')
.then((response) => response.json())
.then((json) => {
let html = '';
json.forEach(human => {
if(human.나이>=20){
isAdult='성인'
}else{
isAdult='미성년자'
}
html += `<li>${human.이름} <br> ${isAdult}</li>`;
});
$('.list1').html(html);
})
💡if문 한줄 작성법
isAdult = (human.나이 >= 20) ? '성인' : '미성년자'
위의 ifelse문은 한줄로 작성 가능하다.
isAdult라는 변수는, human.나이가 20세 이상일때 ?(=if보여져라) 성인 :(else아니라면) 미성년자
index.html
<div class="swiper list1"> <div class="swiper-wrapper"> <!-- <div class="swiper-slide"> <img src="" alt=""> <p>제목</p> <p>내용</p> </div> --> </div> </div> <div class="swiper list2"> <div class="swiper-wrapper"> <!-- <div class="swiper-slide"> <img src="" alt=""> <p>제목</p> <p>내용</p> </div> --> </div> </div>
html swiper 마크업 작성
json의 데이터를 넣을 부분은 삭제
movie.json
{ "items":[ { "img":"", "title":"고딩엄빠", "desc":"부모라면 공감한다", "age":15, "cate":"comic" }, { "img":"", "title":"스파이더맨", "desc":"거미줄", "age":19, "cate":"drama" }, { "img":"", "title":"어덜츠", "desc":"공포기괴", "age":19, "cate":"dark" } ] }
itmes라는 변수를 생성하여 데이터를 감싸줌
img에 이미지 링크 작성
custom.js
fetch('./movie.json') .then((response) => response.json()) .then((json) => { items = json.items // let html = ''; items.forEach(items => { html += `<div class="swiper-slide"> <img src="${items.img}" alt=""> <p>${items.title}</p> <p>${items.desc}</p> <p>${items.age}</p> </div>` }); // $('.swiper-wrapper').html(html); // swiper('.list1'); //각각 swiper에 name을 적용할 swiper명을 넣어준다! swiper('.list2'); }) // function swiper(name){ //name이라는 전체 변수를 function으로 지정해주고 var swiper = new Swiper(name, { slidesPerView:1.5, spaceBetween:10, loop:true, }); }
- items라는 변수를 지정하여 {중괄호}가 감싸고 있는 json.items을 가져오기
- 💡여기서 items는, 중괄호에 데이터를 감싼 변수인 items일뿐, 데이터의 경로까지 닿지 못함!
- 💡json.forEach가 아닌,items경로안의 데이터를 찾아야하기 때문에 item.forEach
- items에 접근하여, items라는 대괄호에서 forEach문을 돌려줌.
- html에 주석한 마크업을 동일하게 작성
- 데이터를 감싸는 div인 swiper-wrapper에 대한 html(html)
- 다수의 동일한 속성을 가진 스와이퍼에 데이터를 넣는 경우라면, name이라는 전체 변수를 fuction으로 지정해주고 var swiper으로 swiper 속성을 부여한다
- 함수 안에 swiper(.name)을 넣어준다.
index에서 전체를 감싸는 swiper명은 list1,list2
index.html
<h1>코믹</h1> <div class="swiper list1"> <div class="swiper-wrapper"> <!-- <div class="swiper-slide"> <img src="" alt=""> <p>제목</p> <p>내용</p> </div> --> </div> </div> <h1>드라마</h1> <div class="swiper list2"> <div class="swiper-wrapper"> <!-- <div class="swiper-slide"> <img src="" alt=""> <p>제목</p> <p>내용</p> </div> --> </div> </div> <h1>다크</h1> <div class="swiper list3"> <div class="swiper-wrapper"> <!-- <div class="swiper-slide"> <img src="" alt=""> <p>제목</p> <p>내용</p> </div> --> </div> </div>
json데이터의 category별로 분류한 마크업 작성
custom.js
fetch('./movie.json') .then((response) => response.json()) .then((json) => { items = json.items // var comic = items.filter(function (param) {return param.cate == "comic" }); var drama = items.filter(function (param) {return param.cate == "drama" }); var dark = items.filter(function (param) {return param.cate == "dark" }); // comichtml = ''; comic.forEach(comic => { comichtml += `<div class="swiper-slide"> <img src="${comic.img}" alt=""> <p>${comic.title}</p> <p>${comic.desc}</p> <p>${comic.age}</p> </div>` }); // dramahtml = ''; drama.forEach(drama => { dramahtml += `<div class="swiper-slide"> <img src="${drama.img}" alt=""> <p>${drama.title}</p> <p>${drama.desc}</p> <p>${drama.age}</p> </div>` }); // darkhtml = ''; dark.forEach(dark => { darkhtml += `<div class="swiper-slide"> <img src="${dark.img}" alt=""> <p>${dark.title}</p> <p>${dark.desc}</p> <p>${dark.age}</p> </div>` }); // $('.list1 .swiper-wrapper').html(comichtml); $('.list2 .swiper-wrapper').html(dramahtml); $('.list3 .swiper-wrapper').html(darkhtml); // swiper('.list1'); swiper('.list2'); swiper('.list3'); }) // function swiper(name){ var swiper = new Swiper(name, { slidesPerView:1.5, spaceBetween:10, loop:true, }); }
- filter (items 필터링)
var comic = items.filter(function (param) {return param.cate == "comic" });
comic 변수는 = items라는 배열에 대해 필터링. param이라는 데이터 값 중 cate(카테고리)이 "comic"이라고 해당되는 것들만 가져온다- 각각의 분류에 대한 html 생성
각각의 html을 작성해주었기 때문에 el로 해서, el.img el.title로 해줘도 된다.- 전체에 대해 감싸는 swiper-wrapper에 해당하는 html 삽입