Подтвердить что ты не робот

В чем разница между json и xml

В чем разница между JSON и XML?

4b9b3361

Ответ 1

Фундаментальное отличие, о котором не упоминалось ни в одном другом ответе, заключается в том, что XML - это язык разметки (как это фактически говорится в его названии), тогда как JSON - это способ представления объектов (как также отмечено в его названии).

Язык разметки - это способ добавления дополнительной информации в свободно распространяющийся простой текст, например

Here is some text.

С XML (используя словарь определенного элемента) вы можете поставить:

<Document>
    <Paragraph Align="Center">
        Here <Bold>is</Bold> some text.
    </Paragraph>
</Document>

Это то, что делает языки разметки полезными для представления документов.

Объектная нотация, подобная JSON, не такая гибкая. Но это обычно хорошо. Когда вы представляете объекты, вам просто не нужна дополнительная гибкость. Чтобы представить приведенный выше пример в JSON, вам действительно нужно решить некоторые проблемы вручную, которые XML решает для вас.

{
    "Paragraphs": [
        {
            "align": "center",
            "content": [
                "Here ", {
                    "style" : "bold",
                    "content": [ "is" ]
                },
                " some text."
            ]
        }
    ]
}

Это не так хорошо, как XML, и причина в том, что мы пытаемся сделать разметку с нотной записью объекта. Поэтому нам нужно изобрести способ рассеять фрагменты простого текста вокруг наших объектов, используя массивы "content", которые могут содержать смесь строк и вложенных объектов.

С другой стороны, если у вас типичная иерархия объектов и вы хотите представлять их в потоке, JSON лучше подходит для этой задачи, чем HTML.

{
    "firstName": "Homer",
    "lastName": "Simpson",
    "relatives": [ "Grandpa", "Marge", "The Boy", "Lisa", "I think that all of them" ]
} 

Здесь логически эквивалентный XML:

<Person>
    <FirstName>Homer</FirstName>
    <LastName>Simpsons</LastName>
    <Relatives>
        <Relative>Grandpa</Relative>
        <Relative>Marge</Relative>
        <Relative>The Boy</Relative>
        <Relative>Lisa</Relative>
        <Relative>I think that all of them</Relative>
    </Relatives>
</Person>

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

Но самое главное, у него есть определенный способ разграничения между "записью" (элементы неупорядоченными, идентифицированными по именам) и "списком" (упорядоченными по позициям, позициями). Объектная нотация практически бесполезна без такого различия. И XML не имеет такого различия! В моем примере XML <Person> есть запись, а <Relatives> - это список, но они не идентифицируются как таковые по синтаксису.

Вместо этого XML имеет "элементы" и "атрибуты". Это похоже на то же различие, но это не так, потому что атрибуты могут иметь только строковые значения. Они не могут быть вложенными объектами. Поэтому я не мог применить эту идею к <Person>, потому что мне не пришлось бы превращать <Relatives> в одну строку.

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

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

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

Таким образом, XML должен (на мой взгляд) быть довольно ограниченной технологией ниши, лучше всего подходит только для того, чтобы изобретать собственные богатые текстовые языки разметки, если по какой-то причине вы не хотите использовать HTML. Проблема заключалась в том, что в 1998 году в Интернете все еще было много шумихи, и XML стал популярным благодаря его поверхностному сходству с HTML. Было странным выбором дизайна, чтобы попытаться применить к иерархическим данным синтаксис, фактически разработанный для удобной разметки.

Ответ 2

Они оба являются форматами данных для иерархических данных, поэтому, хотя синтаксис сильно отличается, структура аналогична. Пример:

JSON:

{
  "persons": [
    {
      "name": "Ford Prefect",
      "gender": "male"
    },
    {
      "name": "Arthur Dent",
      "gender": "male"
    },
    {
      "name": "Tricia McMillan",
      "gender": "female"
    }
  ]
}

XML:

<persons>
  <person>
    <name>Ford Prefect</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Arthur Dent</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Tricia McMillan</name>
    <gender>female</gender>
  </person>
</persons>

Формат XML более продвинут, чем показано на примере. Например, вы можете добавлять атрибуты к каждому элементу, и вы можете использовать пространства имен для разделения элементов. Существуют также стандарты для определения формата XML файла, языка XPATH для запроса данных XML и XSLT для преобразования XML в данные представления.

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

Хотя XML был разработан как независимый формат данных, JSON был разработан специально для использования с Javascript и AJAX, поэтому формат точно такой же, как и буквальный объект Javascript (то есть он является подмножеством кода Javascript, поскольку он например, не может содержать выражения для определения значений).

Ответ 3

Разница между XML и JSON заключается в том, что XML - это язык мета-языка/разметки, а JSON - это легкий обмен данными. Таким образом, синтаксис XML разработан специально, чтобы не иметь внутренней семантики. Конкретные имена элементов ничего не значат, пока конкретное приложение обработки не обработает их определенным образом. Напротив, синтаксис JSON имеет особую семантику, встроенную в вещи между {} - это объект, вещи между [] - это массив и т.д.

Поэтому анализатор JSON точно знает, что означает каждый документ JSON. Анализатор XML знает только, как отделить разметку от данных. Чтобы разобраться со смыслом XML-документа, вы должны написать дополнительный код.

Чтобы проиллюстрировать это, позвольте мне взять пример с Guffa:

{   "persons": [
  {
    "name": "Ford Prefect",
    "gender": "male"
 },
 {
   "name": "Arthur Dent",
   "gender": "male"
  },
  {
    "name": "Tricia McMillan",
    "gender": "female"
  }   ] }

XML-эквивалент, который он дает, не совсем то же самое, поскольку, хотя пример JSON семантически завершен, XML должен интерпретироваться определенным образом, чтобы иметь тот же эффект. По сути, JSON является примером использования установленного языка разметки, семантика которого уже известна, тогда как пример XML создает новый язык разметки без какой-либо предопределенной семантики.

Лучшим эквивалентом XML будет определение (вымышленного) языка XJSON с той же семантикой, что и у JSON, но с использованием синтаксиса XML. Это может выглядеть примерно так:

<xjson>   
  <object>
    <name>persons</name>
    <value>
      <array>
         <object>
            <value>Ford Prefect</value>
            <gender>male</gender>
         </object>
         <object>
            <value>Arthur Dent</value>
            <gender>male</gender>
         </object>
         <object>
            <value>Tricia McMillan</value>
            <gender>female</gender>
         </object>
      </array>
    </value>   
  </object> 
 </xjson>

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

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

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

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

Из этого также следует, что имеет смысл создавать прототипы определенных типов языков и протоколов в XML, но, как только язык или протокол станет общепринятым, подумать о создании более компактного и выразительного пользовательского синтаксиса.

Интересно отметить, что SGML распознал это и предоставил механизм для указания сокращенной разметки для документа SGML. Таким образом, вы могли бы написать SGML DTD для синтаксиса JSON, который позволил бы документу JSON быть прочитанным синтаксическим анализатором SGML. XML удалил эту возможность, что означает, что сегодня, если вы хотите более компактный синтаксис для конкретного языка разметки, вы должны оставить XML позади, как это делает JSON.

Ответ 4

Это два разных способа представления данных, но они довольно разные. Страница wikipedia для JSON и XML дайте несколько примеров каждого, и там сравнение абзац

Ответ 5

Это два формата представления информации. В то время как JSON был разработан, чтобы быть более компактным, XML был дизайн, чтобы быть более читаемым.

Ответ 6

XML использует структуры тегов для представления элементов, например <tag>item</tag> поэтому XML-документ представляет собой набор тегов, вложенных друг в друга. И синтаксис JSON похож на конструкцию с языка Javascript со всеми вещами, такими как списки и словари:

{
 'attrib' : 'value',
 'array' : [1, 2, 3]
}

Итак, если вы используете JSON, очень просто использовать строки JSON во многих языках script, особенно Javascript и Python.