본문 바로가기
BOOK/자바스크립트

JSON 표기법

by "뭉치" 2021. 7. 30.
728x90

JSON 표기법이란 ?

 

JavaScript Object Notation 의 약자로 서로 다른 프로그래밍 언어 간에 데이터를 교환하기 위한 표기법으로 읽고 쓰기 쉽도록 고안해낸 데이터 표기법중 하나.

 

간단한 데이터를 표현하기 하는데는 XML 보다도 더  간단해 질 수 있어 모바일용으로 적극 권장되고 있음.

 

XML 보다는 기능이 적고 간단하기 때문에 파싱하는데 필요한 시간이 단축될 수 있음.

 

표현 방법

 

대부분의 언어에서 친숙하게 사용되고 있는 구조로서 3가지 형태로 표현 할 수 있다.

 

1)  {변수:값, ...} 형태

2) [배열]

3) 혼합형

 

1. { 변수:값, ...} 형태

 

{}를 사용하여 변수명과 값을 나열하는 행태. 과일이름을 정의해 보자.

 

  var fruits = { apple:'사과' , banana: '바나나' , melon:'메론' , watermelon:'수박' }

 

위와 같이 정의된 형태는 객체명.이름 형태로 불러올 수 있으며 배열의 요소명으로 사용하여 불러 올 수 있다.

 

  fruits.apple; // 사과
  fruits.banana; // 바나나

  fruits['apple']; // 사과
  fruits['watermelon']; // 수박

 

2. 배열 형태

 

자바스크립트에서는 배열의 초기값을 지정할 때 {}기호를 사용하여 정의하였지만 json은 []를 사용하여 배열의 초기값을 정의 한다.

 

  var mountine = ['백두산', '지리산', '한라산', '금강산', ' 설악산' ];

 

접근 방법은 일반 배열과 같이 첨자를 사용하여 접근하며 length를 사용하여 배열의 개수를 구할 수 있다.

 

mountine[0]; // 백두산

mountine.length; // 배열의 개수 5

 

3. 혼합형(1)

 

{변수:값} 형태와 배열 형태를 혼합한 형태로 정의하여 사용하는 방법이며, 전체적인 구조는 "변수:값" 형태는 유지하고 배열형만 배열명:[값, ...] 형태로 변경하면 된다.

 

아래의 간단 예를 살펴 보도록 하자.

 

var complex = {
apple:'사과', banana:'바나나', melon:'메론',
mnt:['백두산','금강산', '한라산']
};

 

apple, banana, melon은 complex 객체를 통해 바로 접근할 수 있다.

 

complex.apple; // 사과

complex.banana; // 바나나

complex.melon; // 메론

 

complex안에 있는 mnt 배열은 complex.mnt를 통해 접근 가능하다.

 

complex.mnt[0]; // 백두산

complex.mnt[1]; // 금강산

complex.mnt[2]; // 한라산

 

complex.mnt의 길이를 구하려면 complex.mnt.length 로 구할 수 있다.

 

4. 혼합형(2)

 

2차원 배열 형태로 선언하는 방법이다.

 

  var arry = [ { name:'park', id:'1111'}, 
                   { name:'kim', id:'2222' }
                ];

 

위와 같이 선언되었다면 접근 방법은 다음과 같다.

 

arry[0].name; // park

arry[0].id; // 1111

arry[1].name; // kim

arry[1].id; // 2222

 

선언되는 유형이나 방법은 프로그램 내에서 어떤 조건으로 쓰여지는지에 따라 다양하게 구현 될 수 있다.

 

5. 혼합형(3)

 

배열안에 배열 형태로 선언하여 사용 한다. 예제 소스를 살펴 보도록 하자.

 

[실행소스]

 

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="javascript">


    var array = [{ name:'명산', id: 1234,
                   method:[ {name:'백두산', position:'양강도 삼지연군', height:'2,750m'},
                            {name:'한라산', position:'제두도 서귀포시', height:'1,950m'}]
                 },
                 { name:'강', id: 4567,
                   method:[ {name:'두만강', position:'연해주 국경', length:'547.8Km'},
                            {name:'섬진강', position:'전남/전북', length:'212.3Km'}]
                 } ];


    window.onload = function(){
        rs = document.getElementById("result");
        str =  "Name : " + array[0].name;
        str += "<br/>ID : "   + array[0].id;

        str += "<br/>name : " + array[0].method[0].name;
        str += "<br/>position : " + array[0].method[0].position;
        str += "<br/>height : " + array[0].method[0].height;

        str += "<p/>name : " + array[0].method[1].name;
        str += "<br/>position : " + array[0].method[1].position;
        str += "<br/>height : " + array[0].method[1].height;



        rs.innerHTML =str;

    }
    </script>
</head>
<body>
    <div id='result'></div>

</body>
</html>

 

[실행결과]

 

 

클래스 정의하기

 

Java나 C++처럼 객체에 대한 모든 특징을 갖고 있지는 않지만 자바스크립트를 통하여 객체 지향언어의 일반적인 형식으로 사용할 수 있다.

 

자바스크립트 또한 클래스를 정의 할때 필드(멤버변수)와 메서드(멤버함수)로 나뉘어 정의 할 수 있다.

 

1. prototype으로 정의하기(객체 생성후 사용)

 

[실행소스]

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSON class Define</title>
<script>
    MyClass = function(){};
    MyClass.prototype={
        // 필드가 정의 되는 부분
        // 나열연산자 사용함.
        name:'park',
        id:'1111',
        address:'seoul',
        phone:'010-1111-2222',

        // 메서드가 정의되는 부분
        // 메서드 부분 역시 나열...
        getName:function(){
            return this.name;
        },
        setName:function(n){
            this.name = n;
        }
    }
    //객체 생성
    mc = new MyClass();
    //getter 사용
    document.write(mc.getName());
    document.write("<br/>");
    //setter 사용
    mc.setName("kim");
    document.write(mc.getName());
</script>
</head>
<body>

</body>
</html>

 

[실행결과]

 

 

 

2. prototype 없이 정의(객체 생성하지 않고 바로 사용 방법)

 

new MyClass()와 같은 명령을 사용하여 객체를 생성하지 않고 바로 사용할 수 있도록 만드는 방법이다. 객체를 정의 할 때 약간의 편리한 점은 있지만 동일한 구조의 객체를 여러개 생성하여 사용할 수는 없다는 단점이 있다.

 

[실행예제]

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSON class define2</title>
</head>
<body>
<script>
    var mc = {
        name:'park',
        id:'1111',

        setName:function(n){
            this.name = n;
        },
        getName:function(){
            return this.name;
        }
    }

    document.write('before : ' + mc.getName());
    mc.setName('kim');
    document.write('<br/>atfer : ' + mc.getName());
</script>
</body>
</html>

 

[실행결과]

 

728x90

'BOOK > 자바스크립트' 카테고리의 다른 글

응용예제(앨범만들기)  (0) 2021.07.30
응용예제 - 시계만들기  (0) 2021.07.30
이벤트란?  (0) 2021.07.30
Screen 객체  (0) 2021.07.30
Math 객체  (0) 2021.07.30

댓글