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

Почему JSON важна?

Я только недавно слышал о JSON (Javascript Object Notation). Может ли кто-нибудь объяснить, почему это считается (на некоторых сайтах/блогах/и т.д.), Чтобы быть важным? У нас уже есть XML, почему JSON лучше (помимо того, что он "родной для Javascript" )?

Изменить: Хм, основная тема ответа, похоже, "меньше". Однако мне кажется важным тот факт, что он позволяет получать данные по доменам. Или это на практике еще не используется (пока)?

4b9b3361

Ответ 1

XML имеет несколько недостатков:

  • Это тяжело!
  • Он предоставляет иерархическое представление содержимого, которое не совсем то же, что (но в значительной степени похожее на) объектную модель Javascript.
  • Javascript доступен везде. Без каких-либо внешних парсеров вы можете напрямую обрабатывать JSON с помощью интерпретатора JS.

Очевидно, что это не означает, что полностью заменить XML. Для веб-приложений, основанных на JS, его преимущества могут быть полезными.

Ответ 2

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

Ответ 3

JSON гораздо более кратким. XML:

<person>
    <name>John Doe</name>
    <tags>
        <tag>friend</tag>
        <tag>male</tag>
   </tags>
</person>

JSON:

{"name": "John Doe", "tags": ["friend", "male"]}

Слишком много перекрывающихся функций. Например, в XML существует напряженность между выбором использования элементов (как указано выше) и атрибутами (<person name="John Doe">).

Ответ 4

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

Допустим, вы пишете веб-сервис в домене A. Вы не можете загружать XML-данные из домена B и анализировать их, потому что единственный способ сделать это - XMLHttpRequest, а XMLHttpRequest изначально ограничивался политикой того же происхождения только URL-адреса в том же домене, что и содержащая страница.

Оказывается, по разным причинам вам разрешено запрашивать теги <script> в разных источниках. Умные люди поняли, что это хороший способ обойти ограничение с XMLHttpRequest. Вместо того, чтобы сервер возвращал XML, он может возвращать серию объектов JavaScript и литералов массива.

(бонусный вопрос оставлен читателю в качестве упражнения: почему <script src= "..."> разрешен для доменов без согласия сервера, а XHR - нет?)

Конечно, возвращать <script>, который состоит только из объектных литералов, бесполезно, потому что без присвоения значений какой-либо переменной вы ничего не можете с этим сделать. Таким образом, большинство служб используют вариант JSON, называемый JSONP (http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/).

С ростом популярности гибридных приложений люди поняли, что JSON является удобным форматом обмена данными в целом, особенно когда JavaScript является одним из концов канала. Например, JSON широко используется в Chromium даже в тех случаях, когда C++ находится на обеих сторонах. Это просто удобный способ представления простых данных, для которых существуют хорошие парсеры во многих языках.

Забавно, но использование тегов <script> для создания гибридных приложений невероятно небезопасно, потому что это, по сути, намеренно XSS. Поэтому необходимо было ввести нативный JSON (http://ejohn.org/blog/native-json-support-is-required/), что устраняет первоначальные преимущества формата. Но к тому времени это было уже супер популярно :)

Ответ 5

Если вы работаете в Javascript, нам намного проще JSON. Это связано с тем, что JSON можно непосредственно оценить в объект Javascript, с которым гораздо проще работать, чем с DOM.

Заимствование и незначительное изменение XML и JSON сверху

XML:

<person>
    <name>John Doe</name>
    <tag>friend</tag>
    <tag>male</tag>
</person>

JSON:

{ person: {"name": "John Doe", "tag": ["friend", "male"]} }

Если вы хотите получить второй объект тега с XML, вам нужно будет использовать мощный, но подробный DOM apis:

var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];

В то время как с объектом Javascript, который пришел через JSON, вы можете просто использовать:

var tag2=jsonObj.person.tag[1];

Конечно, JQuery делает пример DOM намного проще:

var tag2=$("person tag",xmlObj).get(1);

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

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

var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);

(некоторым людям может не понравиться эта длинная тройная, но она работает). Но XML был бы (на мой взгляд) более противным (я не думаю, что вы захотите пойти тройственным путем, потому что вы будете продолжать использовать методы dom, которые, возможно, придется снова выполнять работу в зависимости от реализации):

var tag2=null;
var persons=xmlObj.getElementsByTagName("person");
if(persons.length==1) {
    var tags=persons[0].getElementsByTagName("tag");
    if(tags.length==2) { tag2=tags[1]; }
}

JQuery (untested):

var tag2=$("person:only-child tag:nth-child(1)",xmlObj).get(0);

Ответ 7

Это зависит от того, что вы собираетесь делать. Здесь много ответов, которые предпочитают JSON над XML. Если вы посмотрите глубже, то нет большой разницы.

Если у вас есть дерево объектов, вы получаете только дерево объектов javascript. Если вы посмотрите на напряжение, чтобы использовать доступ к стилю OOP, чем поворачивается на вас. Предположим, что у вас есть объект типа A, B, C, который построен в дереве. Вы можете легко включить их для сериализации в JSON. Если вы их прочитаете, вы получите только дерево javascript-объектов. Чтобы восстановить ваши A, B, C, вы должны вручную вводить значения вручную в созданные вручную объекты или выполнять некоторые хаки. Звучит как разбор XML и создание объектов? Хорошо, да:)

В наши дни только новейшие браузеры имеют встроенную поддержку JSON. Для поддержки большего количества браузеров у вас есть два варианта: a) вы загружаете json paraser в javascript, который помогает вам анализировать. Итак, как жир делает это в отношении жира? Другой вариант, который я часто вижу, - eval. Вы можете просто сделать eval() в строке JSON, чтобы получить объекты. Но это вводит совершенно новый набор проблем безопасности. JSON указан так, что он не может содержать функции. Если вы не проверяете объекты для функции, кто-то может легко отправить вам код, который выполняется.

Таким образом, это может зависеть от того, что вам больше нравится: JSON или XML. Самое большое различие заключается в возможности доступа к вещам, будь то script теги XMLHTTPRequest... Я бы принял решение об этом, что использовать. На мой взгляд, если в браузерах будет надлежащая поддержка XPATH, я бы часто решил использовать XML. Но мода направлена ​​на json и загрузку дополнительных json-парсеров в javascript.

Если вы не можете решить, и вы знаете, что вам нужно что-то действительно мощное, вам нужно взглянуть на YAML. Чтение о YAML очень интересно, чтобы получить больше информации в этой теме. Но это действительно зависит от того, что вы пытаетесь сделать.

Ответ 8

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

Он светлый и интуитивный.

Ответ 9

JSON - текстовый формат сериализации объектов, который является более легким, чем XML, и который непосредственно интегрируется с объектной моделью JavaScript. Это большинство его преимуществ прямо там.

Его недостатки (по сравнению с XML) - это примерно: меньше доступных инструментов (забудьте о стандартной проверке и/или преобразовании, не говоря уже о подсветке синтаксиса или проверке корректности в большинстве редакторов), менее вероятно, будут доступны для человека (там огромные различия в читабельности JSON и XML, так что обязательно нечеткое утверждение), тесная интеграция с JavaScript делает для несовместимой интеграции с другими средами.

Ответ 10

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

Например, javascript → веб-сервис С# → javascript