В чем разница между объектом Javascript и объектом JSON - PullRequest
34 голосов
/ 27 июня 2011

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

Ответы [ 5 ]

53 голосов
/ 27 июня 2011

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

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

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

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

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

Или в C #, например:

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

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

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

Хотя обычно вы видите:

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

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

  • объекты (литералы)
  • массивы
  • числа
  • логические значения
  • строк
  • нулей
14 голосов
/ 27 июня 2011

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 голосов
/ 27 июня 2011

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?

0 голосов
/ 26 мая 2015
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"}
0 голосов
/ 27 июня 2011

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

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

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

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

JSON является подмножеством буквенных обозначений объекта JavaScript.

Также вы можете рассмотреть возможность просмотра этой ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...