Чи можемо ми повністю замінити 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-логіка

19
Тьфу. Я ненавиджу ці питання. Я думаю, що це справді стосується використання правильного інструменту для роботи, а не того, чи можна повністю замінити інший. У світі так мало абсолютів, навіть з комп’ютерами. Я не міг уявити собі, що я роблю з JSON, хоча б там, де зараз є відповідні технології.
Філіп Реган

2
@Philip, це не питання про знесення чогось. Він просто намагається зрозуміти, чого не вистачає JSON, щоб ми могли вдосконалити це. :)
Saeed Neamati

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

12
Це не гіпотетично. JSON, здається, не має функції, якою володіє XML.
S.Lott

Відповіді:


153

Те, що надає XML його силу та велику складність, - це змішаний зміст. Такі речі:

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

Навіть не намагайтеся робити це в JSON або не маніпулюйте ним звичайними мовами програмування. Вони не були призначені для роботи.

Таке запитання зазвичай виникає у людей, які забувають, що M у XML означає розмітку. Це спосіб прийняття простого тексту та додавання розмітки для створення структурованого тексту. Це досить зручно і для старомодних даних, але це не те, для чого він був розроблений, або де його основні переваги. Існує маса способів обробки простих даних, і JSON - один з них.


33
+1: Це відмінна риса. Відмінний момент.
S.Lott

7
@Michael, ти просто навчив мене чогось цінного. Це чудова відповідь. +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, і мені цікаво, звідки це поняття. Мені здається, що міська легенда більше, ніж заявлена ​​мета дизайну.
С.Лотт

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

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

4
@Michael Borgwardt: Без повного 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-логіка

2
@ SK-Logic: Це чудово для тривіального прикладу, але я не могла собі уявити, щоб з цим робити глибоко вкладений, змішаний контент - як книгу. Я думаю, що SXML - це стільки ж академічне вправу, як і все.
Філіп Реган

3
@Philip Regan: Як можна писати S-Exp важче, ніж використовувати хевроніт, коли це тривіальне перетворення 1: 1 у менш багатослівну форму?
maaartinus

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

1
@Philip Regan, SXML дуже легко редагувати, зовсім на відміну від XML. І звичайно, це набагато кращий вибір протоколів, зайве згадування про перевагу наявних інструментів.
SK-логіка

14

JSON і XML - це обидва способи форматування даних. Обидва здатні зробити це прекрасно, тож чи може JSON робити все, що робить XML? Так.

Але ..... Більш релевантним питанням може бути не те, що можна зробити XML / JSON , а, а що робити з XML / JSON.

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


5
За винятком змішаного контенту, де дані містять теги. JSON взагалі не дуже добре.
S.Lott

11

За допомогою XSLT існує велика кількість функціональних можливостей, яка може бути неможливою для JSON. Отже, якщо вони не є функціонально еквівалентними, вони не могли б замінити один одного.


3
Це означає, що ви можете використовувати іншу мову для десериалізації, маніпулювання та серіалізації JSON, а XSLT не є XML, тому ця думка насправді є спірною.
StuperUser

3
XSLT - це XML - див.
Схему

Дякую @greengit, у мене був лише короткий виклад, оновив відповідь.
StuperUser

2
@StuperUser: Як це може бути "неможливо" з JSON? Це просто перетворення, можливо, інструменти ще відсутні. Або проблема пов’язана з відсутністю атрибутів у JSON?
maaartinus

1
@StuperUser: XSLT - це мова (підмножина XML), для якої деякі перекладачі були написані щонайменше однією іншою мовою (ймовірно, на C, Java, ...). Те ж саме можна зробити і для JSON (визначте деякий JSON-T, напишіть інтепретер), чи не так?
maaartinus

8

Справа в тому, що нам доведеться жити з обома довго, і бути фанатом JSON "вважається шкідливим".


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 своїм клієнтам. ВІДПОВІДЖУЙТЕ + 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' } }. Тож технічно ваша відповідь не вірна. :)
Saeed Neamati

Звичайно, єдине, чого не вистачає в JSON, - це атрибути, і вони є марними для моделювання об'єктів (на відміну від розмітки). Іноді атрибути використовуються як ярлик для того, що можна виразити за допомогою вкладених даних (наприклад, у файлах конфігурації Hibernate), що зручно, але насправді існування вибору ускладнює. Налаштування файлів та об'єктів моделювання - це два місця, де JSON явно перевершує.
maaartinus

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

6
{замовники: [{name: 'John Doe'}, {name: 'John Doe'}]}?
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.