본문 바로가기
JavaScript

[JavaScript] JSON 데이터 사용해보기

by teamnova 2021. 6. 1.

스틱코드라는 플러그인을 이용해 JSON데이터를 사용해봅시다

이번에 참고한 스틱코드입니다.

 

* 자바스크립트 JSON 파싱

stickode.com/detail.html?no=2142

 

스틱코드

 

stickode.com

 

============================================================================

JSON 이란??

 

JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute - value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.

'JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.

- 위키백과

 

일반적으로 서버에서 클라이언트로 데이터를 보낼 때 사용하는 양식. 클라이언트가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록, 일정한 패턴을 지닌 문자열을 생성해 내보내면 클라이언트는 그를 해석해 데이터를 자기만의 방식으로 온전히 저장, 표시할 수 있게 된다.
과거 웹 초기 시절부터 사용되어 온 XML은 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 쓸데없이 용량을 잡아먹는다는 단점이 항상 지적되어 왔다. 이에 대응해 간결하고 통일된 양식으로 각광을 받고 있는 것이 JSON이다.

- 나무위키

 

JSON은 이렇게 생겼습니다!

{
    "food": [
        {
           "name": "salad",
           "재료": [
               "lettuce",
               "dressing"
               "Nuts and Seeds"
                       ]
        },
        {
           "name": "toast",
           "재로": [
               "bread",
               "egg"
               "suger"
                       ]
        }
    ]
}

============================================================================

이번 예제에서는 MDN 사이트 예제를 참고하되 서버로 부터 리소스를 가져올 때 fetch api를 사용할 껍니다.

Fetch api는 XMLHttpRequest와 비슷하지만 좀더 강력하고 유연한 조작이 가능합니다.

참고한 MDN 사이트 : developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/JSON

 

점/브라켓 표현법을 통해 객체 내 데이터에 접근할 수 있게 됩니다. 아래와 같이요:

superHeroes.homeTown

 

json을 사용하기

1 MDN에서 제공한 json데이터를 fetch api를 이용해서 가져온다.

fetch(
    `https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json`
).then(function(response) {
    return response.json();
}).then(function (json) {
    console.log(JSON.stringify(json));
    showHeroes(json);

}).catch(function(error) {
    console.log(error);
});

 

2 가져온 JSON데이터를 출력한다.

아래와 같이 json과 추출한 데이터들이 잘 찍히는 것을 볼 수 있습니다.

3 가져온 JSON데이터를 HTML에 출력한다.

function showHeroes(jsonObj) {
    var heroes = jsonObj['members'];

    for (var i = 0; i < heroes.length; i++) {
        var myArticle = document.createElement('article');
        var myH2 = document.createElement('h2');
        var myPara1 = document.createElement('p');
        var myPara2 = document.createElement('p');
        var myPara3 = document.createElement('p');
        var myList = document.createElement('ul');

        myH2.textContent = heroes[i].name;
        myPara1.textContent = 'Secret identity: ' + heroes[i].secretIdentity;
        myPara2.textContent = 'Age: ' + heroes[i].age;
        myPara3.textContent = 'Superpowers:';

        var superPowers = heroes[i].powers;
        for (var j = 0; j < superPowers.length; j++) {
            var listItem = document.createElement('li');
            listItem.textContent = superPowers[j];
            myList.appendChild(listItem);
        }

        myArticle.appendChild(myH2);
        myArticle.appendChild(myPara1);
        myArticle.appendChild(myPara2);
        myArticle.appendChild(myPara3);
        myArticle.appendChild(myList);

        section.appendChild(myArticle);
    }
}

 

<결과물>

 

전체코드입니다.

<html> 스틱코드 호출태그 : JSON예제(html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>stickcode_JSON</title>
</head>
<body>
<section>
<!-- JSON 데이터 정렬  -->
</section>
</body>
<script src="main.js"></script>
</html>

<JavaScript> 스틱코드 호출태그 : JSON예제(JavaScript)

var section = document.querySelector('section');

// 1
fetch(
    `https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json`
).then(function(response) {
    return response.json();
}).then(function (json) {
    // 2
    console.log(JSON.stringify(json));

    // 3
    showHeroes(json);

}).catch(function(error) {
    console.log(error);
});

// 3
function showHeroes(jsonObj) {
    var heroes = jsonObj['members'];

    for (var i = 0; i < heroes.length; i++) {
        var myArticle = document.createElement('article');
        var myH2 = document.createElement('h2');
        var myPara1 = document.createElement('p');
        var myPara2 = document.createElement('p');
        var myPara3 = document.createElement('p');
        var myList = document.createElement('ul');

        myH2.textContent = heroes[i].name;
        myPara1.textContent = 'Secret identity: ' + heroes[i].secretIdentity;
        myPara2.textContent = 'Age: ' + heroes[i].age;
        myPara3.textContent = 'Superpowers:';

        var superPowers = heroes[i].powers;
        for (var j = 0; j < superPowers.length; j++) {
            var listItem = document.createElement('li');
            listItem.textContent = superPowers[j];
            myList.appendChild(listItem);
        }

        myArticle.appendChild(myH2);
        myArticle.appendChild(myPara1);
        myArticle.appendChild(myPara2);
        myArticle.appendChild(myPara3);
        myArticle.appendChild(myList);

        section.appendChild(myArticle);
    }
}

 

서버에서 JSON 데이터를 가져오게 되면 2번에서 로그를 찍었던것과 같이 보기 힘들게 출력됩니다.

이 때 데이터를 쉽게 보고 싶다면 json파서를 이용할 수 있습니다.

json.parser.online.fr/