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

5

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

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

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

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

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

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

Ваш Ответ

6   ответов
11

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

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

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

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

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

4

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).

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

2

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

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

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

я строкой. Это объясняет сходство, когда просто смотришь на это. Сегодня 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 );
Ваша строка JSONstill недействительный.
Ваша строка JSON не является допустимой JSON ...
@Eric Спасибо. Ред.
7

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

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

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

//object literal
var foo = {};

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

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 всегда должно быть в двойных кавычках (в объектном литерале это не обязательно))

Похожие вопросы