JSON 및 XML 비교 [닫기]


273

XML과 JSON 중 어느 것이 더 빠른지 알고 싶습니다. 어느 것을 사용할 때?


60
더 빠른 곳? 전염? 처리 중입니까? 생성 중? 둘 다 당신이 아는 발이 없습니다. JSON은 마크 업 오버 헤드가 적기 때문에 "빠른"것 같습니다. 다른 한편으로, XML은 XMLSchema를 제공하여 형식, 구조, 유효성을 보장합니다. 거의 모든 다른 출력 형식으로 XML을 변환하는 XSLT 있습니다. 필요한 것에 따라 다릅니다 .
Felix Kling 2012

2
또한 다른 이전 묻는 질문을 확인하십시오 stackoverflow.com/search?q=json+vs+xml을
펠릭스 클링

16
블라 그! 이것은 내가 정말로 알고 싶었고 여기에 있었기 때문에 정말 기뻤으며 그 대답은 완벽했습니다. BAD ON YOU , 자체 운영자 : 어쩌면 그것의 시간이 참여하여 riles을 확장한다. 적어도 답변을 받아 주셔서 감사합니다.
Mark Gerolimatos

이 게시물이 게임에 늦는지는 신경 쓰지 않지만 동의합니다. 질문이 속임수이거나 관련이 없거나 서비스 약관과 상충되는 경우 (폐쇄되거나 쓸모없는 스레드)가 검색에서 가장 먼저 나타나는 것은 아닙니다. (btw, 이것은 두 번째 [duped] 결과입니다.) 아마도 대답은 간결하고 간결해야하지만 결과 결과가 닫히고 대답이없는 스레드가 주제 의견 (사용 조건에 위배되는)으로 채워진 경우 동의합니다. 아무도 도와주지 않습니다.
Izaac Corbett

2
묻는 질문이 명확하지 않지만 이것은 의견 기반 질문이 아닙니다.
qwr

답변:


221

어느 것을 사용 해야하는지 대답하기 전에 약간의 배경 지식 :

편집 :이 비교는 실제로 JavaScript가있는 브라우저에서 사용하는 관점에서 비롯된 것입니다. 이 중 데이터 형식이 방식이 아니다 사용하는, 내가 꽤 유효한 무슨 말인지 확인하기 위해 세부 사항을 변경합니다 좋은 파서 많이 있습니다.

JSON은 더 작고 읽기 편합니다. 전송시 더 적은 데이터가 전송되기 때문에 전송 속도가 더 빠릅니다.

파싱에서는 파서에 따라 다릅니다. 코드 (JSON 또는 XML)를 데이터 구조 (예 : 맵)로 바꾸는 파서는 XML의 엄격한 특성 ( XML 스키마 는 데이터 구조를 명확하게 명확하게 함) 에서 이점을 얻을 수 있지만 JSON에서는 항목 유형 (문자열 / Number / Nested JSON Object)는 구문 적으로 유추 될 수 있습니다. 예 :

myJSON = {"age" : 12,
          "name" : "Danielle"}

파서는 12숫자 를 나타내는 (그리고 Danielle다른 문자열과 같은) 것을 인식하기에 충분히 지능적 일 필요는 없습니다 . 그래서 자바 스크립트에서 우리는 할 수 있습니다 :

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

XML에서는 다음과 같은 작업을 수행해야합니다.

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(제외 적으로 이것은 XML이 좀 더 장황하다는 점을 보여줍니다. 데이터 전송에 대한 관심). 이 데이터를 사용하려면 파서를 통해 데이터를 실행 한 후 다음과 같이 호출해야합니다.

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

실제로, 좋은 파서는 age당신을 위해 잘 입력 할 수 있습니다 (반면, 당신은 그것을 원하지 않을 수도 있습니다). 이 데이터에 액세스 할 때 진행되는 작업은 위의 JSON 예제에서와 같이 속성 조회를 수행하는 대신 키에서 맵 조회를 수행하는 것 name입니다. 다음과 같이 XML을 작성하는 것이 더 직관적 일 수 있습니다.

<person name="Danielle" age="12" />

그러나 데이터에 액세스하려면 여전히 맵 조회를 수행해야합니다.

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

편집 : 원본 :

대부분의 프로그래밍 언어에서 (일부는 아니더라도) 이와 같은 맵 조회는 속성 조회보다 비용이 많이 듭니다 (JSON을 구문 분석 할 때보 다 높음).

이것은 오해의 소지가 있습니다. JavaScript (및 기타 동적 언어)에서는 지도 조회와 필드 조회간에 차이없습니다 . 실제로 필드 조회 지도 조회 일뿐입니다.

정말 가치있는 비교를 원한다면 벤치마킹하는 것이 가장 좋습니다. 데이터를 사용하려는 맥락에서 벤치 마크를 수행하십시오.

필자가 입력 한대로 Felix Kling은 이미 각 항목을 언제 사용해야하는지 비교하여 상당히 간결한 답변을 작성 했으므로 더 이상 진행하지 않겠습니다.


간단한 메모 ... 자바 스크립트 필드 조회가 반드시지도 조회 일 필요는 없습니다. 대상과 해당 필드에 따라 다릅니다. 소형 객체 (특히 시공 후 속성이 첨부되지 않은 객체)는 최신 JS 엔진에서 인라인 캐시와 함께 최적화 된 "빠른 유형"을 자주 사용했으며 많은 속성 또는 개체 구조가 자주 변경되는 경우
Brandon Paddock

2
JSON은 사람이 파싱하기 쉽지만 XML은 컴퓨터를 파싱하기 쉽다는 것을 알았습니다.
Jus12

5
예를 들어 PHP에서 JSON은 78k에서 종속성없이 json.so를 사용하고 반면에 XML은 54k / 32k에서 xml.so 또는 xmlreader.so가 필요하지만 1.4megs 인 libxml2.so도 필요합니다. . 코드가 많을수록 처리 및 더 많은 메모리를 사용하는 데 시간이 더 걸립니다. 말할 것도없이, XML은 노드 / 트리 구조로 인해 순환 참조를 가지고 있는데, 이는 약한 참조가없는 언어에서는 고통 스러울 수 있습니다. 여러 언어에서 XML 파서가 해당 JSON 파서보다 FAR이 더 큽니다 (더 많은 메모리를 차지하고 더 많은 메모리를 사용함).
Rahly

JS 엄격한 상태 문제를이 관련없는 비교와 혼합하는 이유는 무엇입니까? 이중 또는 삼중 등호 참조.
atilkan

1
많은 파서가 숫자 문자열을 숫자로 해석하거나 숫자를 숫자 문자열로 저장하기 때문에 @atilkan.
mazunki

244

빠름 은 JSON 또는 XML의 속성이 아니거나 그 결과를 비교하면 결과가 아닙니다. 있는 경우 파서의 속성 또는 데이터를 전송하는 대역폭입니다.

다음은 JSON과 XML의 장단점 목록입니다.


JSON

찬성:

  • XML에 비해 "마크 업"오버 헤드가 적은 간단한 구문.
  • 마크 업은 JS 객체 리터럴 표기법의 하위 세트이며 JavaScript와 기본 데이터 유형이 동일하므로 JavaScript와 함께 사용하기 쉽습니다.
  • 설명 및 데이터 유형 및 구조 유효성 검사를위한 JSON 스키마
  • 깊이 중첩 된 구조에서 정보를 추출하기위한 JsonPath

범죄자:

  • 간단한 구문으로 소수의 다른 데이터 유형 만 지원됩니다.

  • 의견에 대한 지원이 없습니다.


XML

찬성:

  • 일반화 된 마크 업; 어떤 종류의 목적 으로든 "방언"을 만들 수 있습니다
  • 데이터 유형, 구조 유효성 검사를위한 XML 스키마 새로운 데이터 유형을 만들 수도 있습니다
  • 다른 출력 형식으로 변환하기위한 XSLT
  • 깊이 중첩 된 구조에서 정보를 추출하기위한 XPath / XQuery
  • 네임 스페이스 지원 내장

범죄자:

  • JSON에 비해 상대적으로 경박합니다 (동일한 양의 정보에 대해 더 많은 데이터가 생성됨).

결국 당신은 당신이 원하는 것을 결정 해야합니다 . 두 형식 모두 합법적 인 사용 사례가 있습니다. 대부분 JavaScript를 사용하려는 경우 JSON을 사용해야합니다.

장단점을 자유롭게 추가하십시오. 저는 XML 전문가가 아닙니다.)


20
JSON 및 Pro for XML의 또 다른 단점 : JSON은 객체 참조 (순환 여부)를 지원하지 않으며 XML은 지원합니다. XML은 id속성을 문서 내에서 고유하게함으로써이를 수행합니다.
어스 엔진

7
@EarthEngine 사실 Json.Net ( json.codeplex.com ) 수행 지원 객체 참조 : james.newtonking.com/projects/json/help/index.html?topic=html/... .
Dmitrii Lobanov

22
@DmitryLobanov : JSON 표준에 추가 제한 사항을 추가하지만 다른 JSON 도구로는 인식되지 않습니다. 따라서 JSON에는 "기본"이 아닙니다. 그러나 XML의 경우 제한이 표준으로 작성되어 기본입니다.
Earth Engine

1
JSON 스키마는 어떻습니까? en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe

5
JSON에는 "null"값뿐만 아니라 배열이 내장되어 있습니다. XML에서는 스키마 파서 전체에 일종의 규칙이 필요합니다. XSLT 같은 JSON (예에 대한 변환 프로젝트도있다 github.com/emlynoregan/bOTLjs )
Vasyl Boroviak

22

그러나 처리 속도가 유일한 관련 문제는 아니지만 문제는 벤치 마크에 몇 가지 숫자가 있습니다 .JSON vs. XML : verbosity에 대한 몇 가지 어려운 숫자 입니다. 빠른 벤치 마크에서 XML은 JSON보다 21 %의 오버 헤드를 나타냅니다.

자세한 내용은 기사에서 알 수 있듯이 가장 일반적인 불만입니다. 실제로는 그다지 관련성이 없습니다 (XML 또는 JSON 데이터는 일반적으로 사람이 아니라 기계에 의해 처리되지 않습니다). 속도를 높이려면 압축하는 데 약간의 시간이 더 걸립니다.

또한이 벤치 마크에서 많은 양의 데이터가 처리되었으며 일반적인 웹 응용 프로그램은 90MB와 같은 크기의 데이터 청크를 전송하지 않으며 압축이 유리하지 않을 수 있습니다 (충분한 데이터 청크의 경우 압축 청크) 압축되지 않은 청크보다 큽니다).

그럼에도 불구하고 압축이 관련되지 않은 경우 JSON은 특히 WebSocket 연결을 통해 전송되는 경우 전송 채널에 비해 가중치가 적습니다. 일반적인 HTTP 오버 헤드가 없으면 JSON의 이점에 차이가 생길 수 있습니다. 중요한.

전송 후 데이터가 소비되며 전체 처리 시간이 계산됩니다. 충분히 크거나 복잡한 데이터를 전송하는 경우 유효성 검사 XML 파서가 자동으로 검사하는 스키마가 없으면 JSON 데이터를 추가로 확인해야합니다. 이러한 검사는 특히 빠르지 않은 JavaScript로 실행되어야하므로 이러한 경우 XML보다 추가 오버 헤드가 발생할 수 있습니다.

어쨌든 테스트만으로 특정 사용 사례에 대한 답변을 제공 할 수 있습니다 (속도가 실제로 유일한 문제이며 표준도 안전도 무결성도 아닙니다).

업데이트 1 : Gzip을 사용하는 것보다 적은 비용으로 압축을 제공하고 압축 된 XML을 압축 해제하는 데 필요한 처리를 저장하는 이진 XML 형식 인 EXI입니다. EXI는 XML, BSON은 JSON입니다. 공간과 시간의 효율성에 대한 몇 가지 참조와 함께 여기에 간단한 개요가 있습니다. EXI : 마지막 이진 표준? .

업데이트 2 : 효율성과 낮은 메모리 및 CPU 공간도 W3C에서 수행 한 이진 XML 성능 보고서도 XML 영역의 문제이기도합니다. 효율적인 XML 교환 평가 .

2015-03-01 업데이트

HTTP 오버 헤드가 문제로 제기되면서 이러한 맥락에서 주목할 가치가 있습니다 .IANA는 EXI 인코딩 (위에서 언급 한 효율적인 이진 XML)을 a HTTP 프로토콜의 컨텐츠 코딩 ( 압축 , 수축gzip 과 함께 )으로 등록했습니다. . 이것은 EXI가 다른 HTTP 클라이언트들 사이에서 브라우저에 의해 이해 될 수있는 옵션임을 의미합니다. 하이퍼 텍스트 전송 프로토콜 매개 변수 (iana.org)를 참조하십시오 .


"이 간단한 벤치 마크에서 XML은 JSON보다 21 %의 오버 헤드를 제공합니다."사용 된 특정 파서에 따라 JSON 파싱에 큰 차이가 있습니다. 특정 파서를 인용하는 것은 거의 의미가 없습니다. XML과 동일합니다.
Jeffrey Blattman

17

나는 디지털 바자에서이 기사가 정말 흥미로웠다 것을 알았다 . Norm에서 인용문 인용 :

JSON 전문가 정보 :

전달하려는 모든 것이 원자 가치 또는 원자 가치의 목록 또는 해시 인 경우 JSON은 XML의 많은 장점을 제공합니다. 인터넷에서 직접 사용할 수 있고 다양한 응용 프로그램을 지원하며 JSON을 처리하는 프로그램을 작성하기가 쉽습니다. 선택적 기능이 거의 없으며 사람이 읽을 수 있고 합리적이며 디자인이 형식적이고 간결하며 JSON 문서를 쉽게 만들 수 있으며 유니 코드를 사용합니다. ...

XML 전문가 정보 :

XML은 비정형 데이터의 풍부한 기능을 현저하게 처리합니다. 많은 웹 API 디자이너들이 죽음을 기쁘시게 축하하더라도 XML의 미래에 대해 전혀 걱정하지 않습니다.

그리고 나는 "너에게 그렇게 말했어!" 내 책상에 치워 더 풍부한 API를 개발하라는 요청을받을 때 JSON 사람들이하는 일을 기대합니다. 덜 잘 구조화 된 데이터를 교환하려고 할 때 JSON으로 데이터를 분산시킬 것인가? JSON 용 스키마 언어에 대한 언급이 가끔 있는데 다른 언어가 뒤따를까요? ...

나는 개인적으로 Norm에 동의합니다. XML에 대한 대부분의 공격은 일반적인 개발자가 아니라 일반적인 응용 프로그램에 대한 웹 개발자의 공격이라고 생각합니다. 그러나 그것은 나의 의견이다! ;)


잘 넣어! 활성 개발자의 80 %가 자바 스크립트 키즈 인 경우 80 %는 JSON이 더 낫다는 의견을 표명합니다. 그러나 유형이 지정된 언어를 사용하는 사람은 JSON에 대해 약간 즐겁습니다. { "foo": 42 }그 개체는 어떤 유형입니까? 그런 다음 유형 부족을 해결하기 위해 다음과 같은 것들이 나타납니다 { "__type": "Bar", "foo": 42 }. 대조적으로 XML에서는 유형이 요소 이름으로 해석 될 수 있습니다 <Bar><foo>42</foo></Bar>. 만 혀짤배기 및 JSON과 같은 자바 스크립트 남자)
BitTickler

15

XML (Extensible Markup Language)은 표준 방송 언어이므로 모든 프로그래밍 언어에서 사용할 수 있고 서버 및 클라이언트 측 모두에서 지원되므로 가장 유연한 솔루션이므로 XHR이 자주 사용됩니다. 더 많은 부분에 대해 XML을 분리하여 지정된 그룹이 다른 부분에 영향을주지 않고 프로그램의 부분을 개발할 수 있습니다. XML 형식은 XML DTD 또는 XML 스키마 (XSL)에 의해 결정될 수도 있고 테스트 될 수 있습니다.

JSON은 데이터 교환 형식으로 JavaScript 응용 프로그램 형식으로 널리 사용되고 있습니다. 기본적으로 이것은 객체 표기법 배열입니다. JSON은 매우 간단한 구문이므로 쉽게 배울 수 있습니다. 또한 JavaScript는 eval함수로 JSON 구문 분석을 지원 합니다. 반면에, eval함수는 부정적입니다. 예를 들어, 프로그램의 JSON 구문 분석 속도가 매우 느릴 eval수 있으며 보안 상 매우 위험 할 수 있습니다. 이것은 JSON이 좋지 않다는 것을 의미하는 것이 아니라 더 조심해야합니다.

게임과 같이 가벼운 데이터 교환이 가능한 응용 프로그램에는 JSON을 사용해야한다고 제안합니다. 실제로 데이터 처리에 신경 쓸 필요가 없으므로 매우 간단하고 빠릅니다.

XML은 쇼핑 사이트 나 이와 같은 더 큰 웹 사이트에 가장 적합합니다. XML은보다 안전하고 명확 할 수 있습니다. 기본 데이터 구조 및 스키마를 작성하여 수정을 쉽게 테스트하고이를 부분으로 쉽게 분리 할 수 ​​있습니다.

속도와 보안 때문에 XML을 사용하는 것이 좋지만 가벼운 작업에는 JSON을 사용하는 것이 좋습니다.


나는 downvoting하지 않지만 JSON이 더 무거운 페이로드이거나 일반적으로 느린 것으로 어떻게 생각하는지 궁금합니다. GZip / Deflate를 적용 할 수 있습니다. 구문은 본질적으로 바이트 단위로 작게 만듭니다. JSON은 또한 스키마를 계약으로 정의하고 쉽게 직렬화 할 수 있습니다.
Anthony Mason

파싱하기 위해 JSON을 평가할 필요는 없습니다.
Yay295

7

JSON의 중요한 점은 보안상의 이유로 데이터 전송을 암호화 된 상태로 유지하는 것입니다. JSON이 XML보다 훨씬 빠르다는 것은 의심의 여지가 없습니다. JSON이 60ms 밖에 걸리지 않는 XML은 100ms가 걸립니다. JSON 데이터는 조작하기 쉽습니다.


5
동의합니다 .JSON이 데이터 전송에서 승리하지만 요소의 마크 업, 유효성 검사 및 확장에는 부족합니다. 그래서 Google이 sitemap.json이 아닌 sitemap.xml을 크롤링하는 이유
Chetabahana

1
사이트 맵은 json이 널리 사용되기 전에 정의되었으므로 가장 좋은 예는 아닙니다. 사이트 맵은 XML이 JSON보다 널리 사용되는 서버 대 서버로 간주됩니다. (JSON은 JavaScript로 작업하기 쉽기 때문에 인기가 많기 때문에 정말 중요합니다.)
Matthew Whited

그러나 Google AMP는 XML이 아닌 json을 사용합니다
Ashraf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.