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>