ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터교환형식
    CS지식 2023. 8. 28. 20:27

    JSON(JavaScript Object Notation)

    • Javascript 객체 문법으로 구조화된 데이터교환형식
    • Python, Javascript, Java 등 여러 언어에서 데이터교환형식으로 쓰이며 객체문법 말고도 단순 배열, 문자열도 표현가능

     

    Javascript 객체문법

    • 키(key)와 값(value)으로 구성
    • 이미 존재하는 키를 중복선언하면 나중에 선언한 해당 키에 대응한 값이 덮어쓰이게 됨
      (마지막으로 설정된 값이 출력이 됨)
    {
    	"name" : "kundol",
    	"name" : "king",
    	"name" : "king"
    }
    const fs = require('fs')
    const path = require('path')
    const a = fs.readFileSync(path.join(__dirname,"a.json"))
    console.log(a)
    console.log(JSON.parse(a))

     

    데이터 + 교환형식

    • 데이터는 추상적인 아이디어에서부터 시작해 구체적인 측정에 이르기까지 다양한 의미로 쓰임
    • 실험, 조사, 관찰 등으로 부터 얻은 사실이나 자료 등을 의미

     

    여러 언어에서의 쓰임

    • 객체, 해시테이블, 딕셔너리 등으로 변환되어 쓰임
    • JSON이라는 데이터를 기반으로 Javascript에서 JSON.parse()라는 함수를 사용하여 Javascript object로 변환
    • Python에서는 JSON.loads()라는 함수를 사용하여 dictionary로 변환
      언어마다 다름
    import json
    
    # some JSON:
    x = '{ "name":"John", "age":30, "city":"New York"}'
    
    # parse x:
    y = json.loads(x)
    
    # the result is a Python dictionary:
    print(y["age"])
    
    # 30

     

    단순 배열, 문자열 표현

    • 단순배열 : [1, 2, 3, 4], 문자열 : "파카파카파카" 이런 식으로 표현 가능
    • JSON도 동일하게 배열은 []로 감싸서 표현
    • 각 객체는 다른 타입을 가지고 있어도 괜찮지만, 타입은 맞춰주는 게 좋음(스키마를 구축)
    • 아래 코드처럼 배열은 [0], [1] 이런식으로 접근하면 되고
      해당 key에 대한 value는 .key 또는 ["key"] 이런 식으로 접근해서 빼내면 됨
    const a = {
    	"지브리OST리스트" : [
            {
                "name" : "마녀 배달부 키키",
                "song" : "따스함에 둘러쌓인다면"
            },
            {
                "name" : "하울의 움직이는 성",
                "song" : "세계의 약속"
            }
        ]
    }
    console.log(a.지브리OST리스트[0])
    console.log(a.지브리OST리스트[0].name)
    console.log(a.지브리OST리스트[0]["song"])
    /*
    { name: '마녀 배달부 키키', song: '따스함에 둘러쌓인다면' }
    마녀 배달부 키키
    따스함에 둘러쌓인다면
    */

     

    JSON의 타입

    • Javascript object와 유사합니다만 undefined, 메서드 등을 포함할 수 없음
    • 수(Number), 문자열(String), 참/거짓(Boolean), 배열(Array), 객체(Object), null 사용

     

    JSON 직렬화, 역직렬화

    • 직렬화 : 외부의 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술
      JSON.stringify()
    • 역직렬화 : 직렬화의 반대를 의미
      JSON.parse()

    JSON의 활용

    • JSON은 프로그래밍 언어와 프레임워크 등에 독립적이므로, 서로 다른 시스템 간에 데이터를 교환하기에 좋음
    • 주로 API의 반환형태, 시스템을 구성하는 설정파일에 활용

     

    XML(Extensible Markup Language)

    • 마크업 형태를 쓰는 데이터교환형식
    • 마크업(markup)은 태그 등을 이용하여 문서나 데이터의 구조를 나타내는 방법(속성부여도 가능)

     

    구성

    • 프롤로그 : 버전, 인코딩
    • 루트요소(단 하나만)
    • 하위 요소들
    <?xml version="1.0" encoding="UTF-8"?>
    <OSTList>
    	<OST like="1">
                <name>마녀 배달부 키키</name>
                <song>따스함에 둘러쌓인다면</song>
    	</OST>
    	<OST like="2">
                <name>하울의 움직이는 성</name>
                <song>세계의 약속</song>
    	</OST>
    </OSTList>

     

    HTML과 XML 비교

    • HTML의 용도는 데이터를 표시 / XML은 데이터를 저장 및 전송
    • HTML에는 미리 정의된 태그가 있지만 사용자는 XML에서 고유한 태그를 만들고 정의 가능
    • XML은 대/소문자를 구분하지만 HTML은 구분하지 않음
      <book> 대신 <Book>으로 태그를 작성하면 XML 구문 분석기에서 오류 발생

     

    JSON과 XML 비교

    • JSON과 비교했을 때 닫힌 태그가 계속해서 들어가기 때문에 JSON과 비교하면 무거움
    • Javascript Object로 변환하기 위해서 JSON보다는 더 많은 노력 필요
      (JSON은 JSON.parse()면 됨)

     

    sitemap.xml

    • XML은 대표적으로 sitemap.xml에 쓰임
    • sitemap.xml은 서비스 내의 모든 페이지들을 리스트업 한 데이터
    • 사이트가 매우 크거나 서로 링크가 종속적으로 연결되지 않은 경우 크롤러가 일부 페이지를 누락하는 일이 있는데
      이를 sitemap.xml이 방지하고 모든 페이지들을 크롤링할 수 있도록 해줌
    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
        <url>
            <loc>http://www.example.com/foo.html</loc>
            <lastmod>2018-06-04</lastmod>
        </url>
        <url>
            <loc>http://www.example.com/abc.html</loc>
            <lastmod>2018-06-04</lastmod>
        </url>
    </urlset>

     

    'CS지식' 카테고리의 다른 글

    디자인패턴(1)  (2) 2023.09.04
    개발자 기본지식  (0) 2023.09.02
    CI/CD  (0) 2023.09.02
    클라우드  (0) 2023.08.31
    API  (1) 2023.08.29

    댓글

Designed by Tistory.