YAML과 JSON의 차이점은 무엇입니까?


735

YAML과 JSON의 차이점은 무엇입니까? 특히 다음 사항을 고려하십시오.

  • 성능 (인코딩 / 디코딩 시간)
  • 메모리 소비
  • 표현 선명도
  • 라이브러리 가용성, 사용 편의성 (C를 선호합니다)

임베디드 시스템에서이 두 가지 중 하나를 사용하여 구성 파일을 저장할 계획이었습니다.

관련 :

YAML 또는 JSON을 사용하여 Perl 데이터를 저장해야합니까?


26
JSON은 YAML의 하위 집합으로 간주 될 수 있습니다. en.wikipedia.org/wiki/JSON#YAML
Charles

2
: @Charles는, 그래,하지만 그들은 미묘한 차이가 ajaxian.com/archives/json-yaml-its-getting-closer-to-truth
pierrotlefou

1
YAML은 (대략) JSON의 상위 집합이므로 성능에 대한 문제는 표현력을 사용할지 여부에 대한 가정 없이는 대답 할 수 없습니다. 필요하지 않은 경우 : YAML 파서는 JSON을 읽는 데 얼마나 빠릅니까? 필요한 경우 : 동일한 아이디어에 대해 더 긴 JSON 표현을 허용하면 JSON 파서가 얼마나 느려 집니까?
poolie

@jokoon 나는 "C 라이브러리를 선호한다"(예 : libyaml)
dbr

4
YAML 문서 복잡하고 읽기 어려울 있습니다. YAML로 "십억의 웃음"공격이 가능합니다. 반면에 복잡한 객체, 그래프 및 기타 구조는 YAML에서 효율적으로 직렬화 할 수 있습니다. 교환 형식과 간단한 구조의 경우 JSON이 선호됩니다. 복잡한 객체 직렬화 또는 문법 정의의 경우 YAML이 선호 될 수 있습니다.
Erik Aronesty

답변:


656

기술적으로 YAML은 JSON의 상위 집합입니다. 이것은 이론적으로 적어도 YAML 파서는 JSON을 이해할 수 있지만 반드시 다른 방법은 아닙니다.

"YAML : JSON과의 관계" 섹션에서 공식 사양을 참조하십시오 .

일반적으로 JSON에서는 사용할 수없는 YAML에 대해 좋아하는 것이 있습니다.

  • 으로 @jdupont 지적 , YAML은 보는 시각 쉽습니다. 실제로 YAML 홈페이지 자체는 유효한 YAML이지만 사람이 쉽게 읽을 수 있습니다.
  • YAML에는 "앵커"를 사용하여 YAML 파일 내의 다른 항목을 참조 할 수 있습니다. 따라서 MySQL 데이터베이스에서 찾을 수있는 것처럼 관계형 정보를 처리 할 수 ​​있습니다.
  • YAML은 YAML 파일 내에 JSON 또는 XML과 같은 다른 직렬화 형식을 포함시키는 데있어 더욱 강력 합니다.

실제로이 마지막 두 가지 사항 중 어느 것도 귀 하나 내가하는 일에 중요하지 않지만 장기적으로는 YAML이보다 강력하고 실행 가능한 데이터 직렬화 형식이 될 것이라고 생각합니다.

현재 AJAX 및 기타 웹 기술은 JSON을 사용하는 경향이 있습니다. YAML은 현재 오프라인 데이터 프로세스에 더 많이 사용되고 있습니다. 예를 들어 기본적으로 C 기반 OpenCV 컴퓨터 비전 패키지에 포함되지만 JSON은 포함되지 않습니다.

JSON 및 YAML에 대한 C 라이브러리를 찾을 수 있습니다. YAML의 라이브러리는 더 새로운 경향이 있지만 과거에는 문제가 없었습니다. 예를 들어 Yaml-cpp를 참조하십시오 .


199
json은 하위 집합 이 아니므 로 가까이 있기 때문에 비 호환성이 격렬 해집니다. json 라이브러리는 일반적으로 더 빠릅니다 ... ( stackoverflow.com/questions/2451732/… ). yaml 지지자들은 그것이 부분 집합이라고 주장 할 것이다. 가독성이 우려되는 경우 yaml을 사용하십시오. 상호 운용성과 속도가 중요한 경우 JSON을 사용하십시오.
Erik Aronesty 2016 년

6
YAML은 특정 형식의 JSON 구문의 상위 집합입니다. 즉, YAML과 호환되는 방식으로 JSON을 사용하는 경우 적절한 하위 집합입니다. 피어 어가 위에서 언급했듯이 사양은 호환성을 목표로하고있다 (ajaxian.com/archives/json-yaml-its-getting-closer-to-truth).
naught101

120
또한 YAML은 편리한 주석을 지원합니다.
Den

59
@ErikAronesty JSON은 YAML 1.1의 하위 집합에 가까웠지만 YAML 1.2부터는 실제 하위 집합입니다. YAML 1.2는 기본적으로 두 사양 간의 마지막 몇 가지 비 호환성을 해결하기 위해 릴리스되었습니다.
00prometheus

64
로부터 YAML 1.2 사양 : "이 개정의 주요 목적은 공식적인 부분 집합으로 JSON을 준수 YAML을 가지고하는 것입니다."
Rich C

203

차이점 :

  1. YAML은 사용 방법에 따라 JSON보다 읽기 쉽습니다.
  2. JSON은 종종 더 빠르며 더 많은 시스템과 여전히 상호 운용 가능합니다.
  3. "충분한"JSON 파서를 매우 빠르게 작성할 수 있습니다
  4. 잠재적으로 유효한 JSON 중복 키 는 확실히 유효하지 않은 YAML입니다.
  5. YAML에는 주석 및 관계형 앵커를 포함한 다양한 기능이 있습니다. 따라서 YAML 구문은 매우 복잡하므로 이해하기 어려울 수 있습니다.
  6. yaml :로 재귀 구조를 작성할 수 {a: &b [*b]}있으며 일부 변환기에서는 무한 반복됩니다. 순환 감지를 사용해도 "yaml 폭탄"이 여전히 가능합니다 ( xml bomb 참조 ).
  7. 참조가 없으므로 JSON에서 객체 참조로 복잡한 구조를 직렬화 할 수 없습니다. 따라서 YAML 직렬화가 더 효율적일 수 있습니다.
  8. 일부 코딩 환경에서 YAML을 사용하면 공격자가 임의 코드실행할 수 있습니다 .

관찰 :

  1. 파이썬 프로그래머는 일반적으로 레벨을 나타 내기 위해 괄호로 묶은 구문 대신 들여 쓰기를 사용하기 때문에 YAML의 열렬한 팬입니다.
  2. 많은 프로그래머들은 들여 쓰기에 "의미"를 붙이는 것이 좋지 않은 선택이라고 생각합니다.
  3. 데이터 형식이 응용 프로그램 환경을 떠나거나 UI 내에서 구문 분석되거나 메시징 계층으로 전송되는 경우 JSON이 더 나은 선택 일 수 있습니다.
  4. YAML은 문법 정의와 같은 복잡한 작업에 직접 사용될 수 있으며 종종 새로운 언어를 발명하는 것보다 더 나은 선택입니다.

9
그것은. Yaml 1.2 의 전체 목적은 몇 가지 호환성 차이를 해결하여 JSON을 엄격한 하위 집합으로 만드는 것입니다. 스펙이 목적을 달성하지 못했다고 생각하는 경우 Erik은 YAML 스펙을 위반하거나 검증 된 1.2 호환 YAML 파서를 깨는 유효한 JSON의 예를 지적하십시오.
SFEley

32
@SFEley YAML 사양에 따르면 유효하지 않은 YAML 일 수있는 유효한 JSON 파일이있을 수 있습니다. 그러나 실제로 사용되지는 않습니다. "JSON의 RFC4627은 매핑 키가"SHOULD "일 뿐이며 YAML은"MUST "라고 주장합니다. 기술적으로 YAML은 JSON 사양을 준수하여 중복을 오류로 처리하도록 선택합니다. 실제로 JSON은 이러한 중복의 의미론에서 유일한 휴대용 JSON 파일은 고유 키가있는 파일이므로 유효한 YAML 파일입니다. " - yaml.org/spec/1.2/spec.html#id2759572
데이비드 C. 주교

9
들여 쓰기 사용에 대한 의견; 글쎄, 나는 익숙해 져야 할지도 모르지만 모든 사람이 그것을 좋아하지는 않을 것이라고 믿는다. 예를 들어, 나는 .NET 사람입니다. travis.yml 파일을보고 있는데 왜 문제가 있는지 궁금했습니다. 나는 탭이 있어야한다는 것을 알았습니다. 공간 / 탭 / 줄 바꾸기 환경 설정으로 인해 모든 사람이 폭발하는 것에 익숙하지는 않습니다.
Phil

10
탭은 들여 쓰기 문자로 전혀 허용되지 않습니다. IMHO, 그것은 구문 언어 들여 쓰기가 있거나없는 모든 언어에서 좋은 코딩 스타일입니다.
00prometheus

6
@Wyrmwood 저는 개인적으로 파이썬과 YAML을 좋아하고 문자 그대로 매일 사용합니다. 나는 사람들이 자주 편집해야하는 것들에 대해서는 YAML을 사용하고 사람들이 "보아야 할"것들에 대해서는 JSON을 사용하는 경향이 있습니다. 들여 쓰기가 혼란스러워하는 C ++ 개발자는 유효한 비판을 받았습니다. 특히 여러 수준 또는 더 긴 기능 블록이있는 경우. 물론 ... 테스트 할 수있는 좋은 코드에는 그러한 것이 없기 때문에 일반적으로 문제가되지 않습니다. 이것은 내 개인적인 관찰이지만 캐주얼 한 Google 검색은 많은 결과를 낳을 것입니다 .... 확인하기는 쉽지 않습니다.
Erik Aronesty

88

난해한 이론을 우회

이것은 나와 같은 Google 검색 결과에서 제목을 읽는 것처럼 세부 사항이 아니라 제목에 대답하므로 웹 개발자 관점에서 설명해야한다고 생각했습니다 .

  1. YAML은 공간 들여 쓰기를 사용하는데, 이는 파이썬 개발자에게 친숙한 영역입니다.
  2. JavaScript 개발자는 JSON이 JavaScript의 하위 세트이고 JSON을 선언하는 간단한 방법을 사용하여 공백없이 일반적인 변수 이름을 사용할 때 키에 큰 따옴표가 필요하지 않고 JavaScript 내부에서 직접 해석되고 작성 될 수 있기 때문에 JSON을 좋아합니다.
  3. YAML과 JSON 모두에 대해 모든 언어에서 잘 작동하는 수많은 파서가 있습니다.
  4. YAML의 공간 형식은 사람이 읽을 수있는 접근 방식이 필요하기 때문에 많은 경우에 훨씬 쉽게 볼 수 있습니다.
  5. 편집기에 공간 형식이 표시되어 있지 않으면 YAML의 형식이보다 간결하고보기 쉬워 보이지만 손으로 ​​편집하기가 어려울 수 있습니다. 탭은 공백이 아니므로 키 입력을 공백으로 해석하는 편집기가없는 경우 추가로 혼동됩니다.
  6. JSON은 YAML보다 기능이 훨씬 적기 때문에 직렬화 및 역 직렬화가 훨씬 빠르기 때문에 더 작고 가벼운 코드로 JSON을 처리 할 수 ​​있습니다.
  7. 일반적인 오해 는 YAML이 구두점을 덜 필요로하며 JSON보다 더 간결하지만, 이것은 완전히 잘못된 것입니다. 공백은 보이지 않으므로 문자가 적은 것처럼 보이지만 적절한 들여 쓰기와 함께 YAML을 올바르게 해석하는 데 필요한 실제 공백을 세면 YAML에는 실제로 JSON보다 많은 문자가 필요합니다. JSON은 공백을 사용하여 계층 구조 또는 그룹화를 나타내지 않으며보다 작은 전송을 위해 불필요한 공백을 제거하여 쉽게 병합 할 수 있습니다.

방에있는 코끼리 : 인터넷 자체

JavaScript는 웹을 크게 능가하며 JavaScript 개발자는 널리 사용되는 웹 API와 함께 JSON을 데이터 형식으로 압도적으로 사용하는 것을 선호하므로 일반적으로 웹 프로그래밍을 할 때 JSON보다 YAML을 사용하는 것이 어려워집니다. 팀 환경에서. 실제로, 대부분의 웹 프로그래머는 YAML이 존재한다는 사실조차 알지 못합니다.

웹 프로그래밍을 수행하는 경우 JavaScript를 사용하는 경우 변환 단계가 필요하지 않으므로 JSON이 기본 방법입니다. 따라서이 경우 JSON보다 YAML을 사용하려면 더 나은 인수를 사용해야합니다.


10
파이썬 개발자가 YAML을 선호한다는 데 동의하지 않습니다. Pythons dict는 기본적으로 JSON이며 dicts 목록은 기본적으로 JSON입니다. 파이썬은 json lib를 빌드했습니다. 참고로 나는 파이썬 개발자이고 JSON을 선호합니다 (내가 아는 대부분의 파이썬 개발자는 JSON을 선호합니다).
karantan

6
공백에 대해 실제로 나를 괴롭히는 한 가지는 혼란스럽고 쉽게 들여 쓰기 할 수 있다는 것입니다. 가이드 규칙이 있습니다. 숨겨진 웁스와 마찬가지로 이것은 yaml을 편집 할 때 아무도 말하는 쉬운 유형 시나리오가 아닙니다. json과 관련된 문제는 없었습니다.
Jason Sebring

6
@JasonSebring. 왜 YAML이 공백과 함께 갔는지 궁금 할 것입니다. YAML의 첫 번째 '바다 속 딥'은 공간 때문에 앱이 깨졌습니다. 인쇄되지 않은 문자를 사용하지 않는 들여 쓰기를 사용하면 훨씬 더 의미가 있다고 생각했을 것입니다! (즉, 왜 지구상에서 ''대신 '.'을 선택하지 않았습니까?) YAML을 이해하려면 사양으로 이동해야합니다. JSON을 이해하기 위해 필요하지 않습니다. (나는 전자에 가본 적이 있고 후자는 결코 없었습니다). 나에게 이것은 정말 '사람이 읽을 수있는'아니다 형식을 나타냅니다
cmroanirgo

7
@ cmroanirgo yah 이것은 내 경험이었습니다. 상사는 우리에게 JSON보다 YAML을 사용하도록 강요했으며 편집하고 수집하는 데 불필요하게 엉망이되었습니다. 나는 투표를 희망하는 것이 나를 입증 할 것이기 때문에 이것을 썼다.
Jason Sebring

3
YAML에서 탭 문제는 (a) 오류 메시지를 읽지 않고 (b) 탭을 강조 표시하지 않는 편집기가 있음을 의미합니다. 두 문제 모두 쉽게 해결할 수 있으므로 불만 사항을 이해하지 못합니다.
toolforger

38

이 질문은 6 살이지만, 이상하게도 실제로 네 가지 점 (속도, 기억력, 표현력, 이식성)을 모두 다루는 대답은 없습니다.

속도

분명히 이것은 구현에 따라 다르지만 JSON이 널리 사용되고 구현하기 쉽기 때문에 더 큰 기본 지원을 받고 속도가 빨라졌습니다. YAML이 JSON이 수행하는 모든 작업과 트럭로드를 더 많이 수행한다는 점을 고려하면 JSON 구현이 더 빠를 가능성이 높습니다.

그러나, YAML 파일은 JSON 대응보다는 (때문에 적은 약간 작을 수 주어진 ",문자), 그건 가능한 고도로 최적화 된 YAML 파서가 예외적 인 상황에 신속하게 될 수있다.

기억

기본적으로 동일한 주장이 적용됩니다. YAML 파서가 동일한 데이터 구조를 나타내는 경우 왜 YAML 파서가 JSON 파서보다 메모리 효율이 더 높은지 알기가 어렵습니다.

표현력

다른 사람들이 지적했듯이, 파이썬 프로그래머는 YAML, JavaScript 프로그래머는 JSON을 선호합니다. 다음과 같이 관찰하겠습니다.

  • JSON의 전체 구문을 쉽게 기억할 수 있으므로 JSON 파일의 의미를 이해하는 데 매우 확신이 있습니다. YAML은 어떤 사람도 이해할 수 없습니다. 미묘함과 엣지 케이스의 수는 극단적입니다.
  • 전체 스펙을 구현하는 구문 분석기는 거의 없으므로 주어진 컨텍스트에서 주어진 표현식의 의미를 확신하기가 더 어렵습니다.
  • JSON에 주석이 없으면 실제로는 고통입니다.

이식성

JSON 라이브러리가없는 현대 언어를 상상하기는 어렵습니다. 전체 사양보다 작은 것을 구현하는 JSON 파서를 상상하기도 어렵습니다. YAML은 광범위하게 지원되지만 JSON보다 널리 사용되지 않으며 각 파서는 다른 하위 집합을 구현합니다. 따라서 YAML 파일은 생각보다 상호 운용성이 떨어집니다.

요약

JSON은 성능 (관련된 경우) 및 상호 운용성면에서 우수합니다. YAML은 사람이 관리하는 파일에 적합합니다. HJSON 은 이식성이 크게 줄어들었지만 괜찮은 타협입니다. JSON5 는 잘 정의 된 구문으로보다 합리적인 절충안입니다.


3
실제로 YAML이 나를 속이는 보이지 않는 문자로 인해 더 작다고 생각했습니다. 보이지 않음 => 실제로는 없습니다. 보이지 않는 문자가 있어야합니다. 특히 YAML이 더 큰 중첩을 얻을 때 JSON을 빠르게 능가합니다. JSON과 YAML을 많이 평평하게 만들 수 있기 때문에 실제로 생각할 때까지 인간이 읽을 수있는 부분이 그 개념에 속하기 때문에 매우 흥미 롭습니다. 나는 또한 YAML이 손으로 편집하기가 매우 어렵고, 읽기가 아니라 편집자 가이드가 필요할 때 편집하기 때문에 중첩 된 항목을 쉽게 잘못 착각했습니다.
Jason Sebring

1
나는 여기에 어떤 대답도 이것을 명시 적으로 언급하지 않는다고 생각합니다. 즉, 대상 고객이 인간이라면 YAML이 더 좋습니다. 대상이 다른 프로그램이지만 데이터를 사람이 읽을 수있게하려면 JSON을 사용하십시오.
Florin T.

사실이지만 질문은 그들이 어떻게 두 가지를 원했는지에 대한 꽤 구체적인 매개 변수를 제시했습니다. 개인적으로 나는 YAML을 절대로 사용하지 않을 것입니다. 상호 운용성을 위해 JSON을 사용하거나 사람의 유지 관리가 중요한 경우 JSON6을 사용합니다.
Steve Bennett

29

GIT 및 YAML

다른 답변은 좋습니다. 먼저 읽어보십시오. 그러나 YAML을 때때로 사용하는 또 다른 이유는 git 입니다.

점점 더 많은 프로그래밍 프로젝트에서 배포 및 보관을 위해 git 리포지토리를 사용합니다. 그리고 git repo의 히스토리는 JSON 및 YAML 파일을 동일하게 저장할 수 있지만 파일의 변경 사항을 추적하고 표시하는 데 사용되는 "diff"메소드는 행 지향적입니다. YAML은 행 지향적이어야하므로 YAML 파일의 작은 변경 사항은 사람이 쉽게 볼 수 있습니다.

물론 문자열 / 키를 정렬하고 들여 쓰기를 추가하여 JSON 파일을 "예쁘게"만들 수있는 것은 사실입니다. 그러나 이것은 기본값이 아니며 게으르다.

개인적으로 저는 일반적으로 시스템 간 상호 작용에 JSON을 사용합니다. 구성 파일, 정적 파일 및 추적 파일에 종종 YAML을 사용합니다. (또한 일반적으로 YAML 관계형 앵커를 추가하는 것을 피합니다. 루프를 찾기에는 수명이 너무 짧습니다.)

또한 속도와 공간이 실제로 문제가되는 경우 사용하지 않습니다. BSON을보고 싶을 수도 있습니다.


22

YAML이 눈에 더 쉽다는 것을 알았습니다. 적은 괄호, ""등입니다. YAML에는 탭의 성가심이 있지만 ...

성능 / 자원 측면에서, 나는 둘 사이에 큰 차이를 기대하지 않을 것입니다.

또한 구성 파일에 대해 이야기하고 있으므로 고주파수의 인코딩 / 디코딩 활동이 예상되지 않습니다.


22
나는 당신 이 탭의 귀찮음 을 의미하는 것이 궁금 합니다 . 나는 yaml에서 탭 문자가 허용되지 않는다고 생각 합니다 . 개인적 으로 어떤 소스 파일에서도 좋은 생각 이라고 생각 합니다 .
poolie

6
@poolie : jldupont는 YAML에서 구문 적으로 중요한 선행 공백 을 나타냅니다.
naught101

10
그래도 탭은 아닙니다.
poolie

20

YAML이 가지고 있고 JSON에없는 기능이 필요하지 않은 경우 JSON이 매우 간단하고 광범위하게 지원되므로 많은 언어로 된 라이브러리가 많기 때문에 JSON을 선호합니다. YAML은 더 복잡하고 지원이 적습니다. 파싱 ​​속도 또는 메모리 사용이 크게 다르지 않으며 프로그램 성능의 큰 부분이 아닐 것이라고 생각합니다.


3
YAML은 어떤 방식으로 더 복잡합니까?
Accatyyc

18
예를 들어 YAML은 다른 답변에서 언급했듯이 앵커를 지원합니다. 확장 가능한 데이터 형식과 같은 다른 기능이 있습니다. 따라서 구문 분석이 더 복잡해지고 YAML의 사양이 더 큰 이유를 설명합니다. 파서 구현에 따라 성능이 저하 될 수 있습니다 (이 질문을 살펴보십시오 : stackoverflow.com/questions/2451732/… ).
Anton Strogonoff

5
복잡성이 전체적인 단순성을 달성 할 수있는 힘을 얻는다면 복잡성은 단순성보다 낫습니다. 이는 데이터 모델의 복잡성에 따라 사실입니다.
Jonathan Neufeld

3
여기에 조금 늦었지만 YAML은 주석을 추가 할 수 있지만 JSON은 주석을 추가 할 수 없습니다. 나에게 그것은 사양의 문서화에 큰 도움이된다
Moses Liao GZ

@Accatyyc. 사람들이 차이점에 대해 질문하고 있다는 사실은 YAML이 쉽지 않다는 확실한 신호 라고 생각합니다 . 나는 한 결코 ( "? 내가 왜 거기에 의견이 없습니다"제외) JSON에 대한 질문을하지
cmroanirgo

15

기술적으로 YAMLJSON 보다 훨씬 많은 기능을 제공합니다 (YAML v1.2는 JSON의 상위 집합입니다).

  • 코멘트
  • 앵커와 상속-3 개의 동일한 항목의 예 :

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

대부분의 경우 사람들은 이러한 추가 기능을 사용하지 않으며 주요 차이점은 YAML은 들여 쓰기사용 하고 JSON은 대괄호를 사용 한다는 것 입니다. 이것은 YAML을 더 간결하고 읽기 쉽게 만듭니다 (훈련 된 눈을 위해).

어느 것을 선택해야합니까?

  • YAML의 추가 기능과 간결한 표기법은 구성 파일 (사용자가 제공하지 않은 파일)에 적합합니다.
  • JSON의 제한된 기능, 폭 넓은 지원 및 빠른 구문 분석을 통해 상호 운용성 및 사용자 제공 데이터를 위한 훌륭한 선택입니다 .

4

YAML과 JSON을 검색 할 때이 질문이 눈에 띄게 나오기 때문에 라이센스 사이에 거의 차이가없는 점은 주목할 가치가 있습니다. JSON은 JSON 사용자가 준수해야하는 라이센스 를 갖습니다 (법적으로 모호한 "악이 아닌 선을 위해 사용해야 함"포함). YAML은 그러한 라이센스 클레임을 보유하지 않으며, 이는 귀하에게 중요하지 않은 변호사와의 중요한 차이 일 수 있습니다.


나는 JSON을 사용하지 않고 JSON을 호출하지 않고 JSON과 동일한 것을 사용합니다. 나는 그것을 PS-OFF라고 부른다. { "": #, [] }??? 를 사용하여 나를 고소 할 것입니다.
Andrew

4

때때로 당신은 다른 것을 결정하지 않아도됩니다.

예를 들어 Go에서 두 가지를 동시에 가질 수 있습니다.

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}

3

출처 : Arnaud Lauret Book“웹 API 디자인” :

JSON 데이터 형식

JSON 은 JavaScript 프로그래밍 언어가 데이터를 설명하는 방식을 기반으로하는 텍스트 데이터 형식이지만 이름에도 불구하고 언어와 무관합니다 ( https://www.json.org/ 참조 ). JSON을 사용하면 이 그림과 같이 정렬되지 않은 이름 / 값 쌍을 포함하는 객체와 정렬 된 값을 포함하는 배열 또는 목록을 설명 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

중괄호 ({})로 개체를 구분합니다. 이름은 따옴표로 묶은 문자열 ( "name")이며 값과 콜론 (:)으로 구분됩니다. 값은 "value"와 같은 문자열, 1.23과 같은 숫자, 부울 (true 또는 false), null 값 null, 객체 또는 배열 일 수 있습니다. 배열은 괄호 ([])로 구분되며 값은 쉼표 (,)로 구분됩니다. JSON의 형식은 쉽게 프로그래밍 언어를 사용하여 구문 분석됩니다. 또한 읽고 쓰는 것이 상대적으로 쉽습니다. 데이터베이스, 구성 파일 및 API와 같은 많은 용도에 널리 사용됩니다.

YAML

YAML (YAML Ai n't Markup Language)은 인간 친화적 인 데이터 직렬화 형식입니다. JSON과 마찬가지로 YAML ( http://yaml.org )은 키 / 값 데이터 형식입니다. 그림은이 둘을 비교 한 것입니다.

여기에 이미지 설명을 입력하십시오

다음 사항에 유의하십시오.

  • YAML의 속성 이름과 값에는 큰 따옴표 ( "")가 없습니다 .

  • JSON의 구조적 중괄호 ({})와 쉼표 (,)는 YAML 에서 줄 바꿈과 들여 쓰기로 대체됩니다 .

  • 배열 괄호 ([])와 쉼표 (,)는 YAML 에서 대시 (-) 및 줄 바꿈으로 대체됩니다 .

  • 달리 JSON , YAML은 해시 기호 (#)로 시작하는 주석을 수 있습니다. 이러한 형식 중 하나를 다른 형식으로 변환하는 것은 비교적 쉽습니다. 그러나 YAML 문서를 JSON으로 변환 할 때 주석이 손실됩니다 .


0

YAML과 JSON 모두 매우 효과적이라는 것을 알았습니다. 하나가 나를 위해 다른 하나를 사용할 때 실제로 지시하는 유일한 것은 언어가 가장 널리 사용되는 것입니다. 예를 들어 Java, Javascript를 사용하는 경우 JSON을 사용합니다. Java의 경우 JSON이 많지만 일부 기능이없는 자체 객체를 사용하고 JSON을 필요로하거나 JSON으로 만들면 JSON으로 변환합니다. Java에서 일반적인 일이기 때문에 다른 Java 개발자가 내 코드를 쉽게 수정할 수 있기 때문에 그렇게합니다. 두 번째는 프로그램이 속성을 기억하기 위해 프로그램을 사용하는지 또는 프로그램이 구성 파일 형식의 명령을 수신하는지 여부입니다.이 경우에는 YAML을 사용합니다. 이는 사람이 쉽게 읽을 수 있기 때문에 훌륭합니다. 구문을 찾고 수정하기가 매우 쉽습니다. YAML의 작동 방식을 모르더라도 그런 다음 프로그램은이를 읽고 JSON으로 변환하거나 해당 언어에 대해 선호하는 것을 변환합니다.

결국, 그것은 정직하게 중요하지 않습니다. 숙련 된 프로그래머라면 JSON과 YAML을 쉽게 읽을 수 있습니다.


-1
  • JSON은 yml을 비교하는 대용량 데이터를 처리 할 수 ​​없습니다

  • 다른 멀티미디어 형식을 처리하는 데 적합하지 않습니다.

  • JSON에는 '설명'을 지원하는 기능이 없습니다. 이것은 추가 속성으로 만 포함될 수 있습니다.

  • YAML은 자체 참조, 복잡한 데이터 유형 지원, 임베디드 블록 리터럴, 주석 등과 같은 JSON보다 몇 가지 장점이 있습니다.

  • JSON은 읽을 수있는 반면 YAML은 읽을 수 있고 편집 할 수 있습니다.
  • JSON은 YAML의 하위 집합이므로 YAML 파서는 JSON을 구문 분석 할 수 있습니다.
  • YAML은 추가 구분 기호를 사용하지 않으므로 XML 및 JSON보다 가볍습니다.

"큰 데이터"및 "읽기 가능한 유일한"포인트에 대해 무엇을 의미합니까? JSON은 데이터 형식입니다. 추상 개념에 이러한 두 가지 제한이있을 수있는 것은 무엇입니까?
João Farias

4
@ JoãoFarias 1GB JSON 파일과 1GB CSV 파일이 있고 256MB의 메모리가 있다고 가정 해 봅시다. JSON을 사용하면 CSV 파일을 한 줄씩 처리 할 수 ​​없으며 쉽게 불가능합니다. JSON을 구문 분석하는 것보다 YAML 파일을 한 줄씩 구문 분석하는 것이 여전히 더 쉽습니다.
NeverEndingQueue
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.