В чем разница между JSON и объектом JavaScript?

Я новичок в JSON и JavaScript-объектах.

  • Может кто-нибудь объяснить различия между JSON и объектом JavaScript?
  • Каковы их применения?
  • Один лучше другого? Или это зависит от ситуации?
  • Когда использовать какой, в какой ситуации?
  • Почему именно JSON был создан? Какова была его главная цель?
  • Может ли кто-нибудь привести примеры того, когда следует использовать JSON, а не объект JavaScript и наоборот?

Ответ 1

Сначала вы должны знать, что такое JSON:

  • Это языковой агностический формат обмена данными.

Синтаксис JSON был вдохновлен нотой JavaScript Object Literal, но между ними существуют различия.

Например, в JSON все ключи должны быть указаны, а в объектных литералах это необязательно:

// JSON:
{ "foo": "bar" }

// Object literal:
var o = { foo: "bar" };

Кавычки обязательны для JSON, потому что в JavaScript (точнее, в ECMAScript 3rd Edition) использование зарезервированных слов в качестве имен свойств запрещается, например:

var o = { if: "foo" }; // SyntaxError in ES3

Хотя использование строкового литерала в качестве имени свойства (цитирование имени свойства) не создает проблем:

var o = { "if": "foo" }; 

Итак, для "совместимости" (и, проще говоря, возможно?) цитаты обязательны.

Типы данных в JSON также ограничены следующими значениями:

  • string
  • number
  • object
  • array
  • Литерала:
    • true
    • false
    • null

Изменяется грамматика Strings. Они должны быть разделены двойными кавычками, в то время как в JavaScript вы можете использовать одиночные или двойные кавычки взаимозаменяемо.

// Invalid JSON:
{ "foo": 'bar' }

Также принята принятая грамматика JSON Numbers, в JavaScript вы можете использовать шестнадцатеричные литералы, например 0xFF или (печально известные) восьмизначные литералы, например. 010. В JSON вы можете использовать только десятичные литералы.

// Invalid JSON:
{ "foo": 0xFF }

Есть некоторая ошибка в реализации (Firefox 3.5+, IE8 +, json2.js), где ошибочно разрешены восьмеричные литералы, например. JSON.parse('01') должен создать SyntaxError.

Ответ 2

JSON - это строковое представление объекта. Это совместимый формат сериализации. Он не привязан только к javascript. Например, существуют сериализаторы JSON для .NET, позволяющие сериализовать/десериализовать объекты .NET.

Так что это просто формат, позволяющий вам конвертировать из объектов в строку и обратно, что удобно, если вы хотите перенести их по проводу.

Это очень близко к представлению объекта javascript, и если вы просто eval() строка JSON, вы получите соответствующий объект.

Ответ 3

JSON - это формат обмена данными, который просто выглядит как подмножество кода YAML или JavaScript, который вы можете выполнить и вернуть объект. Объект JavaScript - это просто объект в JavaScript.

С JSON, являющимся форматом обмена данными, вы можете обмениваться структурированными данными в текстовой форме с ним. На данный момент он довольно развязан с JavaScript. Объект JavaScript позволяет создавать и работать со структурированными данными во время выполнения программы JavaScript.