YAML과 JSON의 차이점은 무엇입니까? 특히 다음 사항을 고려하십시오.
- 성능 (인코딩 / 디코딩 시간)
- 메모리 소비
- 표현 선명도
- 라이브러리 가용성, 사용 편의성 (C를 선호합니다)
임베디드 시스템에서이 두 가지 중 하나를 사용하여 구성 파일을 저장할 계획이었습니다.
YAML과 JSON의 차이점은 무엇입니까? 특히 다음 사항을 고려하십시오.
임베디드 시스템에서이 두 가지 중 하나를 사용하여 구성 파일을 저장할 계획이었습니다.
답변:
기술적으로 YAML은 JSON의 상위 집합입니다. 이것은 이론적으로 적어도 YAML 파서는 JSON을 이해할 수 있지만 반드시 다른 방법은 아닙니다.
"YAML : JSON과의 관계" 섹션에서 공식 사양을 참조하십시오 .
일반적으로 JSON에서는 사용할 수없는 YAML에 대해 좋아하는 것이 있습니다.
실제로이 마지막 두 가지 사항 중 어느 것도 귀 하나 내가하는 일에 중요하지 않지만 장기적으로는 YAML이보다 강력하고 실행 가능한 데이터 직렬화 형식이 될 것이라고 생각합니다.
현재 AJAX 및 기타 웹 기술은 JSON을 사용하는 경향이 있습니다. YAML은 현재 오프라인 데이터 프로세스에 더 많이 사용되고 있습니다. 예를 들어 기본적으로 C 기반 OpenCV 컴퓨터 비전 패키지에 포함되지만 JSON은 포함되지 않습니다.
JSON 및 YAML에 대한 C 라이브러리를 찾을 수 있습니다. YAML의 라이브러리는 더 새로운 경향이 있지만 과거에는 문제가 없었습니다. 예를 들어 Yaml-cpp를 참조하십시오 .
차이점 :
{a: &b [*b]}
있으며 일부 변환기에서는 무한 반복됩니다. 순환 감지를 사용해도 "yaml 폭탄"이 여전히 가능합니다 ( xml bomb 참조 ).관찰 :
이것은 나와 같은 Google 검색 결과에서 제목을 읽는 것처럼 세부 사항이 아니라 제목에 대답하므로 웹 개발자 관점에서 설명해야한다고 생각했습니다 .
JavaScript는 웹을 크게 능가하며 JavaScript 개발자는 널리 사용되는 웹 API와 함께 JSON을 데이터 형식으로 압도적으로 사용하는 것을 선호하므로 일반적으로 웹 프로그래밍을 할 때 JSON보다 YAML을 사용하는 것이 어려워집니다. 팀 환경에서. 실제로, 대부분의 웹 프로그래머는 YAML이 존재한다는 사실조차 알지 못합니다.
웹 프로그래밍을 수행하는 경우 JavaScript를 사용하는 경우 변환 단계가 필요하지 않으므로 JSON이 기본 방법입니다. 따라서이 경우 JSON보다 YAML을 사용하려면 더 나은 인수를 사용해야합니다.
이 질문은 6 살이지만, 이상하게도 실제로 네 가지 점 (속도, 기억력, 표현력, 이식성)을 모두 다루는 대답은 없습니다.
분명히 이것은 구현에 따라 다르지만 JSON이 널리 사용되고 구현하기 쉽기 때문에 더 큰 기본 지원을 받고 속도가 빨라졌습니다. YAML이 JSON이 수행하는 모든 작업과 트럭로드를 더 많이 수행한다는 점을 고려하면 JSON 구현이 더 빠를 가능성이 높습니다.
그러나, YAML 파일은 JSON 대응보다는 (때문에 적은 약간 작을 수 주어진 "
및 ,
문자), 그건 가능한 고도로 최적화 된 YAML 파서가 예외적 인 상황에 신속하게 될 수있다.
기본적으로 동일한 주장이 적용됩니다. YAML 파서가 동일한 데이터 구조를 나타내는 경우 왜 YAML 파서가 JSON 파서보다 메모리 효율이 더 높은지 알기가 어렵습니다.
다른 사람들이 지적했듯이, 파이썬 프로그래머는 YAML, JavaScript 프로그래머는 JSON을 선호합니다. 다음과 같이 관찰하겠습니다.
JSON 라이브러리가없는 현대 언어를 상상하기는 어렵습니다. 전체 사양보다 작은 것을 구현하는 JSON 파서를 상상하기도 어렵습니다. YAML은 광범위하게 지원되지만 JSON보다 널리 사용되지 않으며 각 파서는 다른 하위 집합을 구현합니다. 따라서 YAML 파일은 생각보다 상호 운용성이 떨어집니다.
JSON은 성능 (관련된 경우) 및 상호 운용성면에서 우수합니다. YAML은 사람이 관리하는 파일에 적합합니다. HJSON 은 이식성이 크게 줄어들었지만 괜찮은 타협입니다. JSON5 는 잘 정의 된 구문으로보다 합리적인 절충안입니다.
다른 답변은 좋습니다. 먼저 읽어보십시오. 그러나 YAML을 때때로 사용하는 또 다른 이유는 git 입니다.
점점 더 많은 프로그래밍 프로젝트에서 배포 및 보관을 위해 git 리포지토리를 사용합니다. 그리고 git repo의 히스토리는 JSON 및 YAML 파일을 동일하게 저장할 수 있지만 파일의 변경 사항을 추적하고 표시하는 데 사용되는 "diff"메소드는 행 지향적입니다. YAML은 행 지향적이어야하므로 YAML 파일의 작은 변경 사항은 사람이 쉽게 볼 수 있습니다.
물론 문자열 / 키를 정렬하고 들여 쓰기를 추가하여 JSON 파일을 "예쁘게"만들 수있는 것은 사실입니다. 그러나 이것은 기본값이 아니며 게으르다.
개인적으로 저는 일반적으로 시스템 간 상호 작용에 JSON을 사용합니다. 구성 파일, 정적 파일 및 추적 파일에 종종 YAML을 사용합니다. (또한 일반적으로 YAML 관계형 앵커를 추가하는 것을 피합니다. 루프를 찾기에는 수명이 너무 짧습니다.)
또한 속도와 공간이 실제로 문제가되는 경우 사용하지 않습니다. BSON을보고 싶을 수도 있습니다.
YAML이 눈에 더 쉽다는 것을 알았습니다. 적은 괄호, ""등입니다. YAML에는 탭의 성가심이 있지만 ...
성능 / 자원 측면에서, 나는 둘 사이에 큰 차이를 기대하지 않을 것입니다.
또한 구성 파일에 대해 이야기하고 있으므로 고주파수의 인코딩 / 디코딩 활동이 예상되지 않습니다.
YAML이 가지고 있고 JSON에없는 기능이 필요하지 않은 경우 JSON이 매우 간단하고 광범위하게 지원되므로 많은 언어로 된 라이브러리가 많기 때문에 JSON을 선호합니다. YAML은 더 복잡하고 지원이 적습니다. 파싱 속도 또는 메모리 사용이 크게 다르지 않으며 프로그램 성능의 큰 부분이 아닐 것이라고 생각합니다.
기술적으로 YAML 은 JSON 보다 훨씬 많은 기능을 제공합니다 (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을 검색 할 때이 질문이 눈에 띄게 나오기 때문에 라이센스 사이에 거의 차이가없는 점은 주목할 가치가 있습니다. JSON은 JSON 사용자가 준수해야하는 라이센스 를 갖습니다 (법적으로 모호한 "악이 아닌 선을 위해 사용해야 함"포함). YAML은 그러한 라이센스 클레임을 보유하지 않으며, 이는 귀하에게 중요하지 않은 변호사와의 중요한 차이 일 수 있습니다.
{ "": #, [] }
??? 를 사용하여 나를 고소 할 것입니다.
출처 : 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으로 변환 할 때 주석이 손실됩니다 .
YAML과 JSON 모두 매우 효과적이라는 것을 알았습니다. 하나가 나를 위해 다른 하나를 사용할 때 실제로 지시하는 유일한 것은 언어가 가장 널리 사용되는 것입니다. 예를 들어 Java, Javascript를 사용하는 경우 JSON을 사용합니다. Java의 경우 JSON이 많지만 일부 기능이없는 자체 객체를 사용하고 JSON을 필요로하거나 JSON으로 만들면 JSON으로 변환합니다. Java에서 일반적인 일이기 때문에 다른 Java 개발자가 내 코드를 쉽게 수정할 수 있기 때문에 그렇게합니다. 두 번째는 프로그램이 속성을 기억하기 위해 프로그램을 사용하는지 또는 프로그램이 구성 파일 형식의 명령을 수신하는지 여부입니다.이 경우에는 YAML을 사용합니다. 이는 사람이 쉽게 읽을 수 있기 때문에 훌륭합니다. 구문을 찾고 수정하기가 매우 쉽습니다. YAML의 작동 방식을 모르더라도 그런 다음 프로그램은이를 읽고 JSON으로 변환하거나 해당 언어에 대해 선호하는 것을 변환합니다.
결국, 그것은 정직하게 중요하지 않습니다. 숙련 된 프로그래머라면 JSON과 YAML을 쉽게 읽을 수 있습니다.
JSON은 yml을 비교하는 대용량 데이터를 처리 할 수 없습니다
다른 멀티미디어 형식을 처리하는 데 적합하지 않습니다.
JSON에는 '설명'을 지원하는 기능이 없습니다. 이것은 추가 속성으로 만 포함될 수 있습니다.
YAML은 자체 참조, 복잡한 데이터 유형 지원, 임베디드 블록 리터럴, 주석 등과 같은 JSON보다 몇 가지 장점이 있습니다.