[CS] JSON과 XML

팔랑이·2024년 12월 15일
0

CS

목록 보기
2/19
post-thumbnail

⛳️ 인프런 - cs 지식의 정석 강의를 듣고 학습한 내용입니다.


JSON, XML: 데이터 교환 형식

1. JSON

  • Javascript 객체 문법으로 구조화된 데이터 교환 형식, 단순 배열이나 문자열로도 표현은 가능하다.
  • 여러 언어에서 객체, 해시테이블, 딕셔너리 등으로 변환되어 쓰인다.
  • 프로그래밍 언어나 프레임워크에 독립적이다. 언어나 프레임워크가 업데이트 되어도 JSON은 형태를 그대로 유지하여 사용할 수 있다는 뜻.
  • 따라서 서로 다른 시스템 간에 데이터를 교환하기에 좋다.

구조의 특징

  • 다음과 같이 키:밸류 형식으로 구성된다.
{ "MyApplication" : [
	{
      "no": 1,
 	  "name": "퍼피팅",
   	  "os": "iOS",
   	  "category": "소셜 네트워킹"
 	}, {
      "no": 2,
   	  "name": "우리동네 수리왕",
   	  "os": "iOS",
   	  "category": "라이프스타일"
    }
  ]
}
  • 동일 키를 여러개 쓸 수 없다. 중복되는 키를 사용할 경우, 파싱 과정에서 마지막에 나온 키와 값만 나오거나 오류가 발생한다.
  • 값은 항상 하나의 단일 값이어야 하며, 여러 값을 저장하려면 배열을 사용해야 한다.
  • 값으로 숫자, 문자열, 객체, 배열, 불리언, null 등이 올 수 있다. 그러나 undefined, 메서드 등은 올 수 없다.
  • 객체마다 속성에서 다른 타입의 값을 가질 수 있다.

직렬화와 역직렬화

  • 직렬화: 객체를 저장/전송 가능한 형식으로 변환 (ex: 객체 → JSON, 객체 → 바이너리)
  • 역직렬화: 직렬화하여 변환된 데이터를 다시 객체로 복원

❗️ 참고) 파싱(Parsing) 은 역직렬화보다 넓은 개념이지만 실무에서는 혼용하여 사용하는 것 같음.

Swift에서는 JSONEncoder, JSONDecoder 등을 사용

2. XML

  • 마크업 형태로 쓰이는 데이터 교환 형식
  • 마크업 형태란, 태그 등을 이용해 문서나 데이터의 구조를 나타냄

마크업 구조

프롤로그(버전, 인코딩), 루트요소(단일), 하위 요소 로 이루어진다.

<?xml version="1.0" encoding="UTF-8"?>
<APPList>
  <APP no="1">
    <name> 퍼피팅 </name> <os> iOS </os> <category> 소셜 네트워킹</category>
  </APP>
  <APP no="2">
    <name> 우리동네 수리왕 </name> <os> iOS </os> <category> 라이프스타일 </category>
  </APP>
</APPList>
  • 프롤로그: xml 문서 시작부에 <??> 형식으로 있는 부분으로 버전과 인코딩 방법을 포함. 선택적으로 작성 가능하며(필수X), 인코딩 부분이 작성되지 않았을 경우 기본적으로 UTF-8로 해석됨.
  • 루트요소: <APPList>로 선언된 부분으로, xml 파일에 단 하나만 존재
  • 하위요소: 루트요소 안의 모든 내용들

참고로 위의 코드에서 no="1", no="2" 같이 선언된 부분들은 '속성' 으로, 부가 정보를 간결하게 추가한다.

다음과 같이 속성을 추가해 구분하지 않고 <APP>을 두 번 사용해도 문제 없음.

<APPList>
  <APP>
    <name> 퍼피팅 </name> <os> iOS </os> <category> 소셜 네트워킹</category>
  </APP>
  <APP>
    <name> 우리동네 수리왕 </name> <os> iOS </os> <category> 라이프스타일 </category>
  </APP>
</APPList>

❗️ 위 예시에서 보다시피 XML에서는 태그 안에 있는 값들에는 ""를 넣어 줄 필요가 없다. 단, 속성으로 선언하는 것들은 '' 또는 "" 를 추가해줘야 오류가 나지 않음.

XML vs HTML

  • XML은 데이터를 저장/전송 하려는 목적인 반면, HTML은 데이터를 표시하려는 목적
  • XML은 고유 태그를 만들어 사용, HTML은 지정된 태그가 있음
  • XML은 대소문자를 구분하지만, HTML은 대소문자를 구분하지 않음

XML vs JSON

  • XML은 닫힌 태그가 계속 들어가기 때문에 JSON에 비해서는 무거움
  • 위에서도 서술했지만, XML은 기본적으로 읽읅 때는 모두 텍스트로 읽히며, 텍스트로 파싱 후 적절히 값을 변환하여 사용할 수 있다.
  • 반면 JSON의 값은 다양한 데이터 타입을 가질 수 있으며, 타입 정보가 데이터 구조에 포함되어 파싱 후에도 형식을 유지한다.

다양한 타입의 값을 포함하는 JSON의 예시

{
  "price": 0,         // 숫자
  "name": "퍼피팅",      // 문자열
  "isAvailable": true,  // 불리언
  "categories": ["소셜", "네트워킹"], // 배열
  "details": {          // 객체
    "version": "1.1.2",
    "encoding": "UTF-8"
  }
}
profile
정체되지 않는 성장

0개의 댓글