? JSON : безжировая альтернатива XML
JSON получил широкое распространение среди людей, которые обнаружили, что это значительно облегчает создание распределенных приложений и сервисов. Официальный тип интернет-медиа для JSON: application/json
RFC 4627
. В именах файлов JSON используется расширение .json
.
► Нотация объектов JavaScript (JSON
) - это легкий текстовый формат обмена данными, не зависящий от языка. JSON используется для обмена данными между приложениями, написанными на любом языке программирования.
Объект JSON - это отдельный объект, который содержит две функции, parse и stringify, которые используются для анализа и построения текстов JSON.
- JSON.stringify создает строку, соответствующую следующей грамматике JSON.
- JSON.parse принимает строку, соответствующую грамматике JSON.
Метод parseJSON будет включен в Fourth Edition of ECMAScript
. Тем временем на json.org доступна реализация JavaScript.
var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object
// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}
// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object
// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'
JSON является подмножеством JavaScript. Javascript был получен из стандарта языка программирования ECMAScript.
► ECMAScript
ECMAScript стал одним из самых широко используемых в мире языков программирования общего назначения. Он наиболее известен как язык, встроенный в веб-браузеры, но также широко применяется для серверных и встроенных приложений. ECMAScript основан на нескольких исходных технологиях, наиболее известной из которых является JavaScript
( Netscape Communications)) и JScript
(корпорация Microsoft).) . Хотя до 1994 года ECMA была известна как «Европейская ассоциация производителей компьютеров», после 1994 года, когда организация стала глобальной, «торговая марка» «Ecma» сохранилась по историческим причинам.
ECMAScript - это язык, тогда как JavaScript, JScript и даже ActionScript называются "Dialects"
.
Диалекты были получены из того же языка. Они очень похожи друг на друга, поскольку они произошли от одного языка, но они претерпели некоторые изменения.
Диалект - это разновидность самого языка. Он получен из одного языка.
- Язык SQL - Hibernate MySQL Dialect, Oracle Dialect, ... с некоторыми изменениями или добавленной функциональностью.
Информация о браузере и компьютере ваших пользователей.
navigator.appName // "Netscape"
ECMAScript - это язык сценариев, который лежит в основе JavaScript. JavaScript
language resources
.
ECMA-262
Links
Initial Edition, June 1997
<a href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf" rel="nofollow noreferrer">PDF</a>.
2nd Edition, August 1998
<a href="https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%202nd%20edition,%20August%201998.pdf" rel="nofollow noreferrer">PDF</a>.
3rd Edition, December 1999
<a href="https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf" rel="nofollow noreferrer">PDF</a>.
5th Edition, December 2009
<a href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf" rel="nofollow noreferrer">PDF</a>.
5.1 Edition, June 2011
<a href="https://www.ecma-international.org/ecma-262/5.1/#sec-15.12.1" rel="nofollow noreferrer">HTML</a>.
6th Edition, June 2015
<a href="http://www.ecma-international.org/ecma-262/6.0/index.html#sec-json-object" rel="nofollow noreferrer">HTML</a>.
7ᵗʰ Edition, June 2016
<a href="http://www.ecma-international.org/ecma-262/7.0/index.html#sec-json-object" rel="nofollow noreferrer">HTML</a>.
8th edition, June 2017
<a href="http://www.ecma-international.org/ecma-262/8.0/index.html#sec-json-object" rel="nofollow noreferrer">HTML</a>.
9th Edition, 2018
<a href="https://tc39.github.io/ecma262/" rel="nofollow noreferrer">HTML</a>.
ПРИМЕЧАНИЕ « 4-е издание из ECMAScript не опубликовано, поскольку работа была неполной .
JSON определяет небольшой набор правил форматирования для переносимого представления структурированных данных.
► Значения ключей должны быть в кавычках, для ключей допускаются только строки. Если вы используете не String, он будет преобразован в String. Но не рекомендуется использовать ключи, отличные от String. Посмотрите на пример, подобный этому - { 'key':'val' }
over RFC 4627 - jsonformatter
var storage = {
0 : null,
1 : "Hello"
};
console.log( storage[1] ); // Hello
console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
var objLiteral = {'key1':'val1'};
var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
var obj = { k: 'v' }, obj2 = { k2: 'v2' };
var fun = function keyFun() {} ;
objLiteral[ arr ] = 'ArrayVal'; objLiteral[ arr2 ] = 'OverridenArrayVal';
objLiteral[ obj ] = 'ObjectVal'; objLiteral[ obj2 ] = 'OverridenObjectVal';
objLiteral[ fun ] = 'FunctionVal';
console.log( objLiteral );
// Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
console.log( JSON.stringify( objLiteral ) );
// {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
// Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
console.log('Accessing Array Val : ', objLiteral[ [10,20] ] );
console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
► Строки JSON должны заключаться в кавычки "а не". Строка очень похожа на строку C или Java. Строки должны быть заключены в двойные кавычки.
- Literal - это фиксированные значения, а не переменные, которые вы буквально предоставляете в своем скрипте.
- Строка - это последовательность из нуля или более символов, заключенная в кавычки с обратной косой чертой, то же самое обозначение используется в большинстве языков программирования.
- ? - Специальные символы разрешены в строке, но не рекомендуется использовать.
- \ "- Специальные символы могут быть экранированы. Но не рекомендуется избегать (') одинарных кавычек.
В строгом режиме скинет и ошибка -
SyntaxError: Unexpected token ' in JSON
Проверьте с этим кодом { "Hai\" \n Team ?":5, "Bye \'": 7 }
через онлайн JSON Edtions. Modes
notStrict
,
Strinct
.
var jsonString = "{'foo': 452}"; // {'foo': 452}
var jsonStr = '{"foo": 452}'; // {"foo": 452}
JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
JSON.parse( jsonStr ); // Object {foo: 452}
objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
objLiteral.key2 = 'val';
// objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}
Объект Средства доступа к свойствам обеспечивают доступ к свойствам объекта с помощью точечной нотации или скобочной нотации.
► У вас есть более ограниченный диапазон значений (например, функции не разрешены). Значение может быть строкой в двойных кавычках, числом, логическим значением, нулем, объектом или массивом. Эти структуры могут быть вложенными.
var objLiteral = {};
objLiteral.funKey = function sayHello() {
console.log('Object Key with function as value - Its outcome message.');
};
objLiteral['Key'] = 'Val';
console.log('Object Literal Fun : ', objLiteral );
// Object Literal Fun : Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}
► JavaScript
является самой популярной реализацией стандарта ECMAScript.
Основные функции Javascript основаны на стандарте ECMAScript, но Javascript также имеет другие дополнительные функции, которых нет в спецификации / стандарте ECMA. В каждом браузере есть интерпретатор JavaScript.
JavaScript - это динамически типизированный язык. Это означает, что вам не нужно указывать тип данных переменной при ее объявлении, а типы данных автоматически конвертируются по мере необходимости во время выполнения скрипта.
Literals
:
'37' - 7 // 30
'37' + 7 // "377"
+'37' + 7 // 44
+'37' // 37
'37' // "37"
parseInt('37'); // 37
parseInt('3.7'); // 3
parseFloat(3.7); // 3.7
// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7' // 3.7
Object literals
RFC 7159
Структура объекта представляется в виде пары фигурных скобок, окружающих ноль или более пар имя / значение (или членов). Имя это
строка. После каждого имени стоит двоеточие, отделяющее имя от значения. Одна запятая отделяет значение от следующего
название. Имена внутри объекта ДОЛЖНЫ быть уникальными.
ECMAScript поддерживает наследование на основе прототипов. Каждый конструктор имеет связанный прототип, и каждый объект, созданный этим конструктором, имеет неявную ссылку на прототип (называемый объектом
прототип) связан с его конструктором. Кроме того, прототип может иметь ненулевую неявную ссылку на свой прототип и т. Д .; это называется прототипом цепи.
В объектно-ориентированном языке на основе классов, как правило, состояние передается экземплярами, методы - классами, а наследование - только структура и поведение. В ECMAScript состояние и методы переносятся объектами, а структура, поведение и состояние наследуются.
Прототип - это объект, используемый для реализации наследования структуры, состояния и поведения в ECMAScript. Когда конструктор создает объект, этот объект неявно ссылается на связанный с конструктором прототип с целью разрешения ссылок на свойства. Связанный с конструктором прототип может
быть указанным в программном выражении constructor.prototype, а свойства, добавленные в прототип объекта, передаются по наследству всем объектам, совместно использующим прототип.