Можем ли мы полностью заменить XML на JSON? [закрыто]


78

Я уверен, что многие разработчики знакомы с XML и JSON , и они использовали их обоих. Таким образом, нет смысла объяснять, чем они являются, и какова их цель, даже вкратце.

Если мы попытаемся отобразить их концепции, мы можем сказать (поправьте меня, если я ошибаюсь):

  1. XML-теги эквивалентны JSON {}
  2. Атрибуты XML эквивалентны свойствам JSON
  3. Коллекция XML-тегов эквивалентна JSON []

Единственное, о чем я могу подумать, чего нет в JSON, - это пространства имен XML .

Вопрос в том, рассматривая это отображение и учитывая, что JSON намного легче в этом отображении, можем ли мы видеть мир в будущем (или, по крайней мере, теоретически думать о мире) без XML, но с JSON, делающим все, что делает XML? Можем ли мы использовать JSON везде, где используется XML?

PS: Обратите внимание, что я видел этот вопрос. Это нечто совершенно отличное от того, что я здесь спрашиваю. Поэтому, пожалуйста, не упоминайте дубликат .


14
Очевидно, что мы можем (и должны) заменить все эти чрезмерно запутанные, плохо спроектированные вещи на S-выражения. Мир без XML был бы действительно лучшим местом, но это, к сожалению, не что иное, как желаемое за действительное.
SK-logic

19
Тьфу. Я ненавижу эти вопросы. Я думаю, что это действительно случай использования правильного инструмента для работы, а не того, может ли один полностью заменить другой. В мире так мало абсолютов, даже с компьютерами. Я не мог себе представить, что я могу делать что-то с JSON, по крайней мере там, где сейчас стоят соответствующие технологии.
Филипп Реган

2
@Philip, это не вопрос разрушения чего-либо. Он просто пытается увидеть, чего не хватает в JSON, чтобы мы могли его улучшить. :)
Саид Нямати

4
Обсуждение различий между двумя технологиями, чтобы увидеть, где можно сделать улучшения, сильно отличается от вопроса о том, можно ли заменить одну на другую. Первый - более научный обзор, чем второй, который звучит более антагонистично от разочарования, чем что-либо еще
Филип Риган,

12
Это не гипотетически. Кажется, в JSON отсутствует функция, которой обладает XML.
С.Лотт

Ответы:


153

То, что дает XML его мощь и большую сложность, - это смешанный контент. Вещи как это:

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

Даже не пытайтесь делать это в JSON или манипулировать им в обычных языках программирования. Они не были предназначены для работы.

Этот вопрос обычно задают люди, которые забывают, что M в XML обозначает разметку. Это способ взять простой текст и добавить разметку для создания структурированного текста. Это также очень удобно для устаревших данных, но это не то, для чего они были разработаны, и в чем их основные достоинства. Существует множество способов обработки простых данных, и JSON является одним из них.


33
+1: это отличительная черта. Отличный момент.
S.Lott

7
@ Майкл, ты только что научил меня чему-то ценному. Это отличный ответ. +1.
Саид Нимати

9
.... Есть 3 узла инди P A , элемент B и беспорядок, в котором мы находимся! Это массив, который вы можете просто объяснить в JSON.
Инкогнито

5
@Rob Нет, но я объясняю, что вы можете определить вещи, выраженные в HTML, с большей ясностью и, возможно, более быстрым синтаксическим анализом через JSON (так как для поиска различных типов узлов требуется меньше синтаксического анализа текста). Если бы HTML был JSON-ML, у нас могло бы быть больше разработчиков, которые действительно понимали бы DOM, текстовые узлы и привязки.
Инкогнито

5
@ByrneReese: да, это XML, и да, это действительно. То, что это также HTML, не относится к делу; на самом деле, XHTML также является допустимым XML. :-)
Мартейн

31

Основное различие, я думаю, заключается в том, что XML разработан так, что он самоочевиден с его dtd и всем остальным.

С JSON вы должны много говорить о данных, которые вы получаете.


7
«XML предназначен для самообъяснения». Можете ли вы предоставить ссылку или ссылку для этого? Я не вижу этого в стандартах W3C для XML, и мне интересно, откуда это понятие. Мне кажется, городская легенда больше, чем заявленная цель дизайна.
S.Lott

6
@ S.Lott: Я думаю, что он имеет в виду, что природа тегов XML сама по себе позволяет теговому контенту быть самоочевидным, т. Е. DTD являются необязательными, поэтому правильно сформированный XML можно анализировать без такового. Но я согласен с вашим мнением по этому вопросу, потому что, технически, JSON обладает той же способностью, поэтому я не вижу, чтобы самообъяснение было главным отличием вообще (я не уверен, почему за это продолжают голосовать), а скорее Майкл Кей больше на отметке.
Филипп Реган

5
@ С. Лотт согласился. Я должен сказать, что JSON здесь json.org/example.html легче понять и лучше самодокументирован, чем связанный XML из-за отсутствия многословия.
Даг Т.

4
@ Майкл Боргвардт: Без полной XSD (включая некоторую поддержку онтологий) имена тегов ничего не говорят мне. «значимого» трудно достичь в целом. Это оставляет меня неясным, что «самообъяснение» должно означать в ответе. И у меня нет доказательств того, что это была даже цель разработки для XML.
С.Лотт

4
@Philip Regan: Как и в случае с «самоочевидным кодом», он, похоже, не является особенностью XML. Если это просто универсальная цель реализации, которая применяется ко всем языкам программного обеспечения (коду, доступу к данным, разметке и т. Д.), То, возможно, люди не должны упоминать это конкретно о XML.
С.Лотт

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 - такое же академическое упражнение, как и все остальное.
Филипп Риган

3
@Philip Regan: Как писать S-Exp труднее, чем использовать шевронит, когда это тривиальное преобразование 1: 1 в менее многословную форму?
Маартин

@maartinus: Моя область знаний - книгоиздание: учебники любого рода - глубокие, сложные звери с широким спектром контента, который требует явного управления. DocBook и DITA гораздо более читабельны, чем приведенный выше пример.
Филипп Реган

1
@Philip Regan, SXML очень легко редактировать, в отличие от XML. И, конечно, это гораздо лучший выбор для протоколов, не говоря уже о превосходстве доступных инструментов.
SK-logic

14

JSON и XML являются способами форматирования данных. Оба способны делать это на отлично, поэтому может ли JSON делать все, что делает XML? Да.

Но ..... Более актуальный вопрос может быть не о том, что может делать XML / JSON , а о том, что вы можете сделать с XML / JSON.

Есть несколько вещей, которые вы можете сделать с XML, но я не думаю, что вы можете сделать с JSON, например, перевод с XLST, поиск с XPath и проверка с помощью схем. Все очень и очень полезно.


5
За исключением смешанного контента, где данные содержат теги. JSON не очень хорошо это делает.
С.Лотт

11

В XSLT есть много функций, которые могут быть невозможны в JSON. Так что, если они не являются функционально эквивалентными, они не смогут заменить друг друга.


3
Тем не менее, вы можете использовать другой язык для десериализации, манипулирования и сериализации JSON, а XSLT не является XML, так что этот вопрос действительно спорный.
StuperUser

3
XSLT - это XML - см.
Схему

Спасибо @greengit, у меня было только краткое разоблачение, обновил ответ.
StuperUser

2
@StuperUser: Как это может быть «невозможно» с JSON? Это просто трансформация, может быть, инструменты еще не хватает. Или проблема связана с отсутствием атрибутов в JSON?
Маартин

1
@StuperUser: XSLT - это язык (подмножество XML), для которого некоторые интерпретаторы были написаны по крайней мере на одном другом языке (вероятно, на C, Java, ...). То же самое можно сделать для JSON (определите JSON-T, напишите intepreter), не так ли?
Маартин


7

JSON довольно новый, и устаревшие системы его не поддерживают. Обновление унаследованных систем является сложным и содержит ошибки. JSON не заменит XML в любое время в ближайшем будущем.


2
Спасибо за ваш ответ. Я имею в виду технический обзор, а не стратегию реализации. Я просто хочу знать, например, для новых версий этих устаревших систем, можем ли мы полностью отбросить XML и использовать JSON? Если нет, то что нам не хватает в JSON?
Саид Нимати

С другой стороны, я не использовал 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

Зачем ограничивать себя JSON, когда YAML - супернабор, гораздо более выразительный и, следовательно, мощный, чем XML или JSON.

Тем не менее, если вы используете правильные платформы сериализации, вы сможете сериализовать и десериализовать все вышеупомянутые форматы с помощью пары простых строк кода.


3

Становится безобразным, когда вы пытаетесь смоделировать эти два объекта в JSON:

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

Используя JSON, как это принято, в 99% случаев можно потеряться:

{ name: "John Doe" } 

И теперь вам нужно добавить несколько мета-структур, и вся красота JSON исчезла, а вы остались с минусами.


11
JSON эквивалентен предоставленному вами XML { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Технически, ваш ответ не верен. :)
Саид Неати

Конечно, в JSON не хватает только атрибутов, и они бесполезны для моделирования объектов (в отличие от разметки). Иногда атрибуты используются как ярлык для того, что может быть выражено с помощью вложенных данных (например, в конфигурационных файлах Hibernate), что удобно, но на самом деле наличие выбора усложняет задачу. Файлы конфигурации и объекты моделирования - это два места, где JSON явно лучше.
Maaartinus

2
@SaeedNeamati, как бы ты смоделировал <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>в JSON?
svick

6
{клиенты: [{имя: «Джон Доу»}, {имя: «Джон Доу»}]}?
scrwtp

2
@Stijn - верно, и это работает, но это подтверждает комментарий из исходного ответа, что «вам нужно добавить некоторые мета-структуры» для моделирования определенных вещей, которые более естественным образом выпадают в XML.
Мэтт Р

3

Я не знаю, существует ли такая возможность для JSON, но, по крайней мере, в .NET вы можете проверять XML по заданной схеме. Это ценное преимущество XML в моих глазах.


2
У json тоже есть схемы: json-schema.org
lordvlad
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.