XML을 JSON으로 완전히 바꿀 수 있습니까? [닫은]


78

많은 개발자들이 XMLJSON에 익숙 할 것이라고 확신 하며 둘 다 사용했습니다. 따라서 그들이 무엇인지, 그들의 목적이 무엇인지 간단히 설명 할 필요는 없습니다.

개념을 매핑하려고하면 다음과 같이 말할 수 있습니다 (내가 틀렸다면 수정).

  1. XML 태그는 JSON과 같습니다. {}
  2. XML 속성은 JSON 속성과 같습니다.
  3. XML 태그 컬렉션은 JSON과 같습니다. []

JSON에는 존재하지 않는 것으로 생각할 수있는 유일한 것은 XML 네임 스페이스 입니다.

문제는이 매핑을 고려하고 JSON 이이 매핑에서 훨씬 가볍다는 것을 고려할 때 XML이없는 미래의 세계를 볼 수는 있지만 JSON을 사용하면 XML 이하는 모든 일을 할 수 있습니까? XML이 사용되는 모든 곳에서 JSON을 사용할 수 있습니까?

추신 : 질문을 보았습니다 . 내가 여기서 묻는 것과는 완전히 다른 것입니다. 따라서 duplicate를 언급하지 마십시오 .


14
우리는 불충분하게 잘못 설계된 모든 것들을 S- 표현으로 대체 할 수 있습니다. XML이없는 세상은 실제로 훨씬 더 좋은 곳이지만 불행히도 희망적인 생각 일뿐입니다.
SK-logic

19
어. 나는이 질문들을 싫어한다. 나는 이것이 실제로 다른 도구를 완전히 대체 할 수 있는지 여부가 아니라 작업에 적합한 도구를 사용하는 경우라고 생각합니다. 컴퓨터조차도 세상에는 절대적인 것이 거의 없습니다. 적어도 각각의 기술이 지금 서있는 곳에서 JSON으로 수행하는 작업을 상상할 수 없었습니다.
Philip Regan

2
@ 필립, 이것은 무언가를 철거하는 데 대한 질문이 아닙니다. JSON이 부족한 것을 확인하여 개선 할 수 있습니다. :)
Saeed Neamati

4
개선이 가능한 부분을보기위한 두 기술의 차이점에 대한 논의는 하나를 다른 것으로 대체 할 수 있는지를 묻는 것과는 매우 다릅니다. 전자는 후자보다 학문적으로 더 많은 검토를 받고 있으며 이는 무엇보다 좌절에서 더 적대적으로 들립니다
Philip Regan

12
이것은 가설이 아닙니다. JSON에는 XML이 가진 기능이없는 것 같습니다.
S.Lott

답변:


153

XML에 강력 함과 많은 복잡성을주는 것은 혼합 컨텐츠입니다. 이런 것들 :

<p>A <b>fine</b> mess we're in!</p>

JSON에서 그렇게하거나 전통적인 프로그래밍 언어로 조작하지 마십시오. 그들은 작업을 위해 설계되지 않았습니다.

이런 종류의 질문은 보통 XML에서 M이 마크 업을 의미한다는 것을 잊어 버린 사람들로부터 나옵니다. 일반 텍스트를 사용하고 마크 업을 추가하여 구조화 된 텍스트를 만드는 방법입니다. 구식 데이터에도 매우 유용하지만, 그것이 설계된 것이거나 주요 강점이있는 것은 아닙니다. 간단한 데이터를 처리하는 방법은 여러 가지가 있으며 JSON도 그 중 하나입니다.


33
+1 : 구별되는 기능입니다. 훌륭한 지적입니다.
S.Lott

7
@Michael, 당신은 나에게 가치있는 것을 가르쳐주었습니다. 이것은 좋은 대답입니다. +1.
Saeed Neamati

9
.... P,, A B 요소 및`우리가있는 혼란! '에 3 개의 노드가 있습니다 . JSON으로 간단히 설명 할 수있는 배열입니다.
시크릿

5
@ Rob 아니요,하지만 HTML로 표현 된 것을 더 명확하게 정의하고 JSON을 통해 더 빨리 파싱 할 수 있다고 설명합니다 (다른 유형의 노드를 찾으려면 텍스트 파싱이 덜 필요하므로). HTML이 JSON-ML 인 경우 DOM, 텍스트 노드 및 바인딩을 실제로 이해하는 개발자가 더 많을 수 있습니다.
시크릿

5
@ByrneReese : 그렇습니다. XML이고 그렇습니다. HTML이기도하다. 실제로 XHTML도 유효한 XML입니다. :-)
Martijn

31

필자가 생각하는 가장 큰 차이점은 XML이 dtd와 모든 것에 대해 스스로 설명하도록 설계되었다는 것입니다.

JSON을 사용하면 수신중인 데이터에 대해 많은 것을 가정해야합니다.


7
"XML은 스스로 설명하도록 설계되었습니다." 이에 대한 링크 또는 참조를 제공 할 수 있습니까? 나는 XML에 대한 W3C 표준에서 그것을 보지 못하며이 개념의 출처가 궁금합니다. 나는 명시된 디자인 목표보다 도시의 전설처럼 보입니다.
S.Lott

6
@ S.Lott : XML 태그의 본질 자체는 태그 된 내용을 설명 할 수있게 해줍니다. 즉 DTD는 선택 사항이므로 잘 구성된 XML을 하나도없이 구문 분석 할 수 있습니다. 그러나 기술적으로 JSON에는 동일한 기능이 있기 때문에 문제에 대한 귀하의 의견에 동의합니다. 자기 설명이 주요한 차이가 전혀 보이지 않습니다 (왜 이것이 계속 투표권을 얻는 지 잘 모르겠습니다). 마이클 케이 (Michael Kay)가 더 많은 관심을 받고 있습니다.
Philip Regan

5
@ S.Lott는 동의했다. json.org/example.html 의 JSON 은 자세한 XML이 부족하기 때문에 관련 XML보다 이해하기 쉽고 자체 문서화 되어 있다고 말해야합니다 .
Doug T.

4
@Michael Borgwardt : 완전한 XSD (온톨로지 지원 포함) 태그 이름이 없으면 아무 것도 말하지 않습니다. "의미있는"은 일반적으로 달성하기 어렵다. 그것은 대답에서 "자기 설명"이 무엇을 의미하는지에 대해 명확하지 않습니다. 그리고 그것이 XML의 디자인 목표라는 증거도 없습니다.
S.Lott

4
@Philip Regan : "자체 설명 코드"와 마찬가지로 XML 기능 이 아닌 것 같습니다 . 모든 소프트웨어 언어 (코드, 데이터 액세스, 마크 업 등)에 적용되는 보편적 인 구현 목표라면 XML과 관련하여 언급하지 않아야 할 것입니다.
S.Lott

21

JSON으로의 리터럴 번역은 간결하고 명확하지 않은 경우가 많습니다. 치다:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

내가 본 가장 효과적인 JSON 표현 :

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

이제 전체 XML 파일에 대해 상상해보십시오. JSON에는 그 자리가 없지만 XML을 배제해서는 안된다는 말은 아닙니다.


8
이제 SXML을 고려하십시오.(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic

2
@ SK-Logic : 사소한 예에는 좋지만 책과 같이 깊게 중첩 된 혼합 컨텐츠를 사용하는 것을 상상할 수 없었습니다. 저는 SXML이 다른 학문적 운동이라고 생각합니다.
Philip Regan

3
@Philip Regan : S-Exp가 덜 장황한 형태로 사소한 1 : 1 변형 인 경우 어떻게 쉐브론 염을 사용하여 S-Exp를 더 세게 작성할 수 있습니까?
maaartinus

@maartinus : 저의 전문 분야는 책 출판에 있습니다. 모든 종류의 교과서는 명시적인 관리가 필요한 다양한 컨텐츠를 가진 깊고 복잡한 짐승입니다. DocBook과 DITA는 위에 주어진 예제보다 훨씬 더 읽기 쉽습니다.
Philip Regan

1
@Philip Regan의 SXML은 XML과 달리 편집하기가 매우 쉽습니다. 물론 사용 가능한 툴링의 우수성을 언급 할 필요없이 프로토콜에 훨씬 더 나은 선택입니다.
SK-logic

14

JSON과 XML은 데이터를 형식화하는 방법입니다. 둘 다 완벽하게 수행 할 수 있으므로 JSON이 XML의 모든 작업을 수행 할 수 있습니까? 예.

그러나 ..... 더 관련 질문은 XML / JSON이 할 수있는 것이 아닐 수도 있지만, 오히려, 당신은 무엇을 할 수 XML / JSON.

당신이 할 수있는 몇 가지가 있습니다 같은 XLST로 번역 XPath를 사용하여 검색 및 스키마와 검증 등 내가 JSON으로 당신이 할 수 있다고 생각하지 않습니다 XML은. 모두 매우 유용합니다.


5
데이터에 태그가 포함 된 혼합 콘텐츠는 제외합니다. JSON은 전혀 잘하지 않습니다.
S.Lott

11

XSLT 를 사용 하는 JSON에는 불가능한 많은 기능 이 있습니다. 따라서 기능적으로 동일하지 않으면 서로 대체 할 수 없습니다.


3
즉, 다른 언어를 사용하여 JSON을 역 직렬화, 조작 및 직렬화 할 수 있으며 XSLT는 XML이 아니므 로이 시점은 실제로 불충분합니다.
StuperUser

3
XSLT는 이다 XML - 스키마를 참조 여기에
treecoder

감사합니다 @greengit, 나는 그것에 대한 간략한 노출 만 가지고 답변을 업데이트했습니다.
StuperUser

2
@StuperUser : JSON으로 어떻게 "불가능" 할 수 있습니까? 도구 일 뿐인 변형 일뿐입니다. 아니면 문제가 JSON의 속성 부족과 관련이 있습니까?
maaartinus

1
@StuperUser : XSLT는 일부 인터프리터가 다른 언어 (아마도 C, Java 등)로 작성된 언어 (XML의 하위 집합)입니다. JSON에 대해서도 동일한 작업을 수행 할 수 있습니다 (일부 JSON-T를 정의하고 정수기를 작성하십시오).
maaartinus

8

사실, 우리는 오랫동안 둘 다와 함께 살아야 할 것이며 JSON Bigot가되는 것은 "유해한 것으로 간주됩니다".


7

JSON은 상당히 새롭고 레거시 시스템은이를 지원하지 않습니다. 레거시 시스템 업그레이드는 비용이 많이 들고 버그가 발생합니다. JSON은 가까운 시일 내에 XML을 대체하지 않습니다.


2
답장을 보내 주셔서 감사합니다. 내가 염두에두고있는 것은 구현 전략이 아닌 기술 검토입니다. 예를 들어 레거시 시스템의 새 버전의 경우 XML을 완전히 삭제하고 JSON을 사용할 수 있습니까? 그렇지 않다면 JSON에서 무엇을 놓치고 있습니까?
Saeed Neamati

반면에, 지난 몇 년 동안 XML을 사용하지 않고 JSON 만 사용했습니다. 그리고 좋은 승차감. 물론 XML은 더 진취적입니다. 이는 업무 보안에 좋지만 효율성에는 좋지 않습니다.
gnasher729

6

나는 cwallenpoole이 훌륭한 지적이라고 말합니다. 대부분의 XML JSON으로 변환 될 있지만 그렇게하는 것이 더 나은지 여부는 별도의 지점입니다.

JSON은 최소한 XML뿐만 아니라 데이터 구조에도 적합하지만 XML은 텍스트 문서를 표시 할 때 JSON보다 훨씬 자연스럽게 읽습니다. 여기서 태그는 단순히 계층 구조를 구분하는 방법이 아닌 더 큰 텍스트 흐름 내에서 사용됩니다. 분야.

HTML 5에는 자체 파서가있을 수 있지만 여전히 DocBook과 같은 응용 프로그램이 남습니다.


JSON은 분명히 HTML을 포함 할 수있는 문자열을 포함 할 수 있습니다.
gnasher729

6

도메인에 따라 다릅니다. 웹 서비스 측면에서? 물론. 공급 업체가 여전히 고객에게 SOAP를 제공하고 있다는 것은 완전히 부끄러운 일입니다. REST + JSON.

이제 Docbook이나 다른 구현과 같은 스타일 정보가있는 복잡한 구조화 된 데이터에 대해 이야기 할 때? 이것이 XML에 적합한 도메인입니다.


4

YAML이 슈퍼 세트이며 훨씬 표현력이 뛰어나 XML이나 JSON보다 강력 할 때 왜 JSON으로 제한해야합니까?

즉, 올바른 직렬화 프레임 워크를 사용하면 위에서 언급 한 모든 형식을 간단한 코드 몇 줄로 직렬화하고 역 직렬화 할 수 있어야합니다.


3

이 두 객체를 JSON으로 모델링하려고하면 추악합니다.

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

99 %의 경우에 익숙한 JSON을 사용하면 다음과 같이 손실됩니다.

{ name: "John Doe" } 

이제 메타 구조를 추가해야하며 단점이있는 동안 JSON의 모든 아름다움이 사라졌습니다.


11
제공된 XML과 동등한 JSON은 { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }입니다. 따라서 기술적으로 귀하의 답변이 정확하지 않습니다. :)
Saeed Neamati

물론 JSON에서 부족한 것은 속성이며, 마크 업과 달리 객체 모델링에는 쓸모가 없습니다 . 때로는 속성이 중첩 된 데이터를 사용하여 표현할 수있는 항목 (예 : 최대 절전 모드 구성 파일)에 대한 바로 가기로 사용되기도하지만 실제로는 선택의 존재로 인해 더 어려워집니다. 구성 파일과 모델링 객체는 JSON이 분명히 뛰어난 두 곳입니다.
maaartinus

2
@SaeedNeamati, <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>JSON으로 어떻게 모델링 하시겠습니까?
svick

6
{고객 : [{이름 : 'John Doe'}, {이름 : 'John Doe'}]}?
scrwtp

2
@Stijn-맞습니다. 그러나 그것은 작동하지만 XML에서 더 자연스럽게 빠지는 특정 것들을 모델링하기 위해 "일부 메타 구조를 추가해야합니다"라는 원래의 대답을 확인합니다.
Matt R

3

그러한 기능이 JSON에 존재하는지 모르겠지만 .NET에서는 최소한 주어진 스키마에 대해 XML의 유효성을 검사 할 수 있습니다. 그것은 내 눈에 XML의 귀중한 장점입니다.


2
json도 스키마를 가지고 있습니다 : json-schema.org
lordvlad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.