12/19
평소 아무 생각 없이 자연스럽게 써오던 JSON... 약간의 궁금한 것들이 생긴 김에 정리 한번 하고 가려고 한다.
JSON 은 JavaScript Object Notation 으로, 서버와 클라이언트에서 데이터를 공유하고 전송하기 위한 직렬화 형식이다. 기존의 XML은 헤더와 태그 등의 요소로 가독성이 떨어지고, 용량을 잡아먹는 단점이 있었는데, 이에 대응해 간결하고 통일된 양식으로 사용된다.
CSV 만큼 간단하면서도, 복잡한 데이터를 표현 가능하다는 것이 장점인데, 사람이 배워 읽고 쓰는 것도 쉬운 데다가, 간단한 규칙과 구조로 기계가 파싱하기에도 쉽다.
특징
JavaScript 객체 표기법으로 만들어져 웹 브라우저 레벨에서 쉽게 해석할 수 있으며, 모양과 규칙 자체가 단순한 덕분에 다른 언어에서 구현하기도 쉽다. 사용되는 거의 모든 프로그래밍 언어에서 사용 가능할 정도. 단순하지만 유연한 표기법이라 독립적인 데이터 표기법으로 사용되고 있는데, MongoDB 에서 마개조한 BSON 이나, NoSQL 의 경우에는 표준 표기법으로 사용하고, PostgreSQL, MySQL 에서도 지원한다.
다른 특징으로는, 기존에 XML 을 잘 사용하던 곳에는 굳이 사용할 필요성이 적기도 해 웹브라우저가 주인 환경에서 대체할 필요는 딱히 없다는 것. 데이터 무결성 검증 역할이 따로 없어 그 역할을 XML 의 Schema 에 떠맞기기도 한다. 이를 극복하기 위해 JSON-Schema 나 JSON-LD(Linking Data) 가 나오고 있다고는 한데... 흠
또 XML 에 비해 주석을 지원하지 않는다던가, 날짜, 시간 데이터를 지원하지 않는다던가, 타입을 강제하려면 JSON 스키마로 보완해야 한다거나.. 하는 문제도 있다.
번외
실제 작업하면서 생겼던 C# 쪽의 궁금증들 정리
JObject
C# 의 Newtonsoft.Json 라이브러리를 사용할 때 사용되는 JSON 객체 타입이다. key 는 string 으로, value 는 JToken 타입을 가지는데, 이를 통해 C# 클래스 없이도 JSON 데이터를 조작하거나 직렬화, 역직렬화를 할 수 있다.
JToken
JToken 은 마찬가지로 NewtonSoft.Json 라이브러리의 추상화된, 다른 모든 값들을 처리할 수 있는 클래스로, JObject(JSON 객체), JArray(JSON 배열), JValue(단일 값), JProperty(key-value pair) 를 하위 클래스로 가진다.
JsonMergeSettings
클래스 이름에서부터 알 수 있듯이, JSON 객체를 병합할 때 사용하는 설정을 지정하는 클래스. 두 개의 JSON 데이터 소스에서 충돌이나 특정 조건이 발생했을 때의 처리를 미리 정의한다.
MergeArrayHandling: 추가할지, 덮어쓸지, 다른 방식으로 처리할지 정의
MergeNullValueHandling: 한쪽 소스의 속성 값이 Null 일 때, 병합 결과에 포함할지, 무시할지 결정
PropertyNameComparison: 속성 이름을 비교할 때 대소문자 구분 여부 등 문자열 비교 방식 정의
'공부 > TIL•기타' 카테고리의 다른 글
| ORM Document / Docset (0) | 2025.12.01 |
|---|---|
| Breakpoint (0) | 2025.11.25 |
| 편한 유지보수를 위한 방법론 (0) | 2025.11.13 |
| 문서 객체 모델(DOM) (0) | 2025.11.10 |
| Deprecated (0) | 2025.11.07 |