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

У меня путаница в том, что именно люди подразумевают под Object Literals, JSON, JavaScript Objects, мне они кажутся похожими:

{foo: 'bar', bar : 'baz'}

AFAIK, выше - это литерал объекта, json, а также объект javascript, не так ли?

Объектный литерал и json означают одно и то же?

Как вы, ребята, различаете, что к чему?

 Drew Gaynor08 июн. 2012 г., 17:12
Этот вопрос и его ответы могут быть полезны:What is the difference between JSON and Object Literal Notation?
 user110692508 июн. 2012 г., 17:18
... другими словами, это стандартизированный текстовый формат для передачи данных между различными средами программирования.
 Felix Kling08 июн. 2012 г., 17:23
Позвольте мне привести другой пример:foo=42;baz=21, Как вы думаете, это? Можно подумать, что это два оператора JavaScript, присваивающие значения переменным. Но в моем (вымышленном) случае это одна строка в файле CSV с; как разделитель и не имеет ничего общего с JavaScript (или любым другим языком). Это просто способ хранения и представления данных. Вот что такое JSON.
 Šime Vidas08 июн. 2012 г., 17:26
{foo: 'bar', bar : 'baz'} может быть либо литералом объекта, либо (недействительным) JSON, в зависимости от того, где он находится. Однако это, безусловно, не значение JavaScript Object - объекты существуют в памяти, а не в исходном коде.
 user110692508 июн. 2012 г., 17:13
Очень редко вы вручную создаете строку в JavaScript для представления структуры JSON. Обычно, если в вашем JavaScript есть какие-либо данные JSON, они будут созданы с использованиемJSON.stringify(), Думайте о JSON как о разметке, которая разбирается на структуры данных. Эта разметка может быть отправлена в некоторую не-JavaScript среду и проанализирована в любой структуре данных, имеющей смысл для этой среды.

Ответы на вопрос(6)

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

// this is a JSON variable
var json = '{"foo": "bar", "bar" : "baz"}';

// obj is a JavaScript obj, defined by the object literal on the right hand side
var obj = {foo: 'bar', bar : 'baz'};
JSON - serialized object; similar syntax as defining an object in JS Object literal - shorthand syntax to define an object in JS Object - the result of a definition by, e.g., an object literal

В JS вы можете преобразовать строку JSON в объект, используя

var obj = JSON.parse( json );

и получить JSON-представление объекта (исключая вложенные функции)

var json = JSON.stringify( obj );
 08 июн. 2012 г., 17:11
@Eric Спасибо. Ред.
 08 июн. 2012 г., 17:11
Ваша строка JSONstill недействительный.
 08 июн. 2012 г., 17:09
Ваша строка JSON не является допустимой JSON ...

above is object literal, json as well as javascript object, isn't it?

Это объектный литерал. Это создает объект.

Это не JSON, так как он не соответствует синтаксису (который является подмножеством буквенных обозначений объекта). Ключи не указаны и неправильные кавычки (' вместо") используются вокруг значений.

How do you guys differentiate which is what ?

Контекст.

JSON обычно не появляется (внедряется) в середине программ JavaScript. Это формат данных, который обычно отображается в виде целых файлов (или ответов HTTP).

Когда что-то ожидает объект, оно может получить его из литерала объекта или из переменной (или возвращаемого значения из вызова функции и т. Д., И т. Д.).

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

Ваш пример будет допустимой строкой JSON, если она содержит следующее:

{"foo": "bar", "bar": "baz"}
 08 июн. 2012 г., 17:17
@FelixKling Я думаю, что "действительная строка JSON" quot; на самом деле они означают «строку, содержащую действительный синтаксис JSON». Или, другими словами, строка, которая может быть проанализирована как JSON для создания объекта.
 08 июн. 2012 г., 17:14
По той же ссылке "Значение может быть строкой в двойных кавычках, или числом, или истиной, или ложью, или нулем, или объектом или массивом. Эти структуры могут быть вложенными & quot;
 08 июн. 2012 г., 17:14
Было бы действительно JSON, если бы это было{"foo": "bar", "bar": "baz"}... окружающие цитаты недействительны.
 08 июн. 2012 г., 17:18
@ Энтони: Ммм ... может быть. Термин JSONstring здесь довольно неоднозначно. & Quot; строка & Quot; может подразумеваться как тип данных (в JavaScript) (в этом случае кавычки в порядке) или просто как последовательность символов (кавычки не будут в порядке) (по крайней мере, так я интерпретировал это как не носитель английского языка) ,
 08 июн. 2012 г., 17:32
@Felix: уточнить (так как я не являюсь носителем английского языка): я имел в виду строку как последовательность символовwithin строка (тип данных).

Object Literal:

привязкаMozilla ,

An object literal is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}).

Javascript Object:

привязкаMozilla,

In JavaScript, an object is a standalone entity, with properties and type

JSON:

привязкаMozilla а такжеMozilla

JSON (JavaScript Object Notation) is a data-interchange format. It closely resembles a subset of JavaScript syntax, although it is not a strict subset.JSON is a syntax for serializing objects, arrays, numbers, strings, booleans, and null. It is based upon JavaScript syntax but is distinct from it: some JavaScript is not JSON, and some JSON is not JavaScript.

In loose words,

object переменная javascript, которая может иметь свойства и тип

object literal способ присвоения свойств и связанных значенийobject.

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

(Обычно существует строгость, позволяющая использовать все языки, мы не можем использоватьfunction как ценность,key всегда должно быть в двойных кавычках (в объектном литерале это не обязательно))

jsonString содержит строку JSON:

var jsonString = '{"foo": "bar", "bar" : "baz"}'

javascriptObject содержит объект javascript, инициализированный с использованием литерала объекта:

var javascriptObject =  {foo: 'bar', bar : 'baz'}

Вы можете преобразовать строку json в объект javascript с помощьюJSON.parseи снова сJSON.stringify.

Решение Вопроса

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

JavaScript Objects являются частью языка JavaScript и связаны с такими вещами, как прототип.

Object literals создает объект javascript на месте с помощью скобок, в отличие от использованияnew ключевое слово илиObject.create().

//object literal
var foo = {};

//equivalent
var foo = new Object();
 08 июн. 2012 г., 17:31
Хорошая точка зрения. это предложение не является необходимым. удален!
 08 июн. 2012 г., 17:28
Мне нравится ответ, кроме первого предложения. Учитывая только эту строку кода, это не JSON и не допустимый JavaScript (или литерал объекта). Для JSON он пропускает кавычки вокруг ключей и в JavaScript, поскольку он не находится в контексте выражения,{ } будет интерпретироваться как разделители блоков (а не как буквенные индикаторы объекта). Так что это не все три, это ни то, ни другое.

Ваш ответ на вопрос