Какая разница между объектом Javascript и объектом JSON

Может ли кто-нибудь сказать мне разницу между объектом Javascript и объектом JSON с примером?

Ответы

Ответ 1

Объект Javascript - это тип данных в Javascript - он имеет смысл только в Javascript. Часто вы видите литерал объекта Javascript следующим образом:

var obj = {
    a: 1,
    b: 2
};

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

Вышеуказанный объект Javascript может быть представлен в формате JSON в Javascript следующим образом:

var json = '{ "a": 1, "b": 2 }';

Или в С#, как это:

string json = "{ \"a\": 1, \"b\": 2 }";

Как вы можете видеть, JSON просто хранится внутри строки. Чтобы сделать его полезным, строка JSON может быть проанализирована для создания объекта на любом языке. Поскольку формат JSON имитирует буквенный синтаксис объекта Javascript, Javascript упрощает процесс синтаксического анализа:

var obj = eval('(' + json + ')');

Как правило, вы увидите:

var obj = JSON.parse(json); // for security reasons

Обратите внимание, что JSON ограничен тем, что он не может хранить функции - единственные значения, которые он может содержать:

  • объекты (литералы)
  • массивы
  • числа
  • булевы
  • строки
  • обнуляет

Ответ 2

JSON - текстовое представление объекта javscript. Это фактически литерал объекта в нотации javascript (отсюда и название - JavaScript Object Notation = > JSON).

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

Некоторые примеры объектов в/из текста:

// Create obj using an object literal
var obj = {key: 'value'};

// Convert to text using JSON.stringify
var text = JSON.stringify(obj);

// Show the value of text
alert( text ); // {"key":"value"}

// Create a new object from text
var newObj = JSON.parse(text); // javascript object

// Show the text version of newObj
alert(JSON.stringify(newObj));  // {"key":"value"}

// Use text as code
var newObj2 = eval('(' + text + ')');

// It is indeed a string literal
alert(JSON.stringify(newObj2));  // {"key":"value"}

Если вы хотите сравнить два объекта, конвертируйте их из JSON в объекты (если они JSON в первую очередь), сделайте что-то вроде:

function compareObjects(a, b) {
  var i, p, aProps = [], bProps = [];

  // Simple test first
  if (a === b) {
    return true;
  }

  // Get properties of a
  for (p in a) {
    if (a.hasOwnProperty(p)) {
      aProps.push(p);
    } 
  }

  // Get properties of b
  for (p in b ) {
    if (b.hasOwnProperty(p)) {
      bProps.push(p);
    } 
  }

  // If don't have same properties, return false
  if (aProps.sort().join('') != bProps.sort().join('')) {
    return false;
  }

  // If property values aren't the same, return false
  i = aProps.length;
  while (i--) {
    if (a[aProps[i]] !== b[bProps[i]]) {
      return false;
    }
  }

  // If passed all tests, must be equal
  return true;
}

Ответ 3

JSON означает "Обозначение объекта JavaScript". В принципе, JSON является Javascript, но ограничивается просто заполнением объекта данными. Выполняя объект JSON, вы "загружаете" данные в памяти.
JavaScript - это большая картина, с дополнительными строками кода для управления объектом или для выполнения всех видов других вещей.

Пример JSON будет следующим:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

Пример JavaScript:

var Glossary = {
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

Обратите внимание на var Glossary = в JavaScript?

Ответ 4

Ну, прежде всего, JavaScript похож на любой другой объект в объектно-ориентированном программировании.

И как сказал RobG, JSON фактически является литералом объекта в Javascript Notation. Но не совсем. Согласно книге Javascript, это говорит о том, что это объект, определяемый с помощью Object Notation:

var newObject = 
{     prop1 : true,     
showMessage : function (msg) {alert(msg)} 
}; 

Согласно JSON в JavaScript,

JSON - это подмножество объектной литературной нотации JavaScript.

Также вы можете рассмотреть возможность взглянуть на эту ссылку

Ответ 5

var object = {
    name: "John",
    profession: "blogger"
};

alert(object.name);//John
alert(typeof(object));//Object
alert(object);//[object Object]


var json = JSON.stringify(object);

alert(json.name);//undefined
alert(typeof(json));//string
alert(json);//{"name":"John","profession":"blogger"}