-
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>