JSON:XML 的无脂肪替代品
JSON 已被人们广泛采用,他们发现它使生成分布式应用程序和服务变得更加容易。JSON 的官方 Internet 媒体类型是application/json
RFC 4627
. JSON 文件名使用扩展名.json
.
► JavaScript Object Notation ( 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 已经发展成为世界上使用最广泛的通用编程语言之一。它最出名的是嵌入在 Web 浏览器中的语言,但也被广泛用于服务器和嵌入式应用程序。 ECMAScript 基于几种原始技术,最著名的是JavaScript
(Netscape Communications)和JScript
(Microsoft Corporation)。)。尽管在 1994 年之前,ECMA 被称为“欧洲计算机制造商协会”,但在 1994 年之后,当该组织走向全球时,“商标”“ECMA”由于历史原因而被保留。
ECMAScript 是一种语言,而 JavaScript、JScript 甚至 ActionScript 都称为"Dialects"
.
方言源自同一种语言。它们彼此非常相似,因为它们源自相同的语言,但它们发生了一些变化。方言是语言本身的变体。它源自单一语言。
- SQL 语言 - Hibernate MySQL 方言,Oracle 方言,.. 有一些更改或添加的功能。
有关您用户的浏览器和计算机的信息。
navigator.appName // "Netscape"
ECMAScript 是构成 JavaScript 基础的脚本语言。.JavaScript
language resources
ECMA-262
Links
Initial Edition, June 1997
PDF.
2nd Edition, August 1998
PDF.
3rd Edition, December 1999
PDF.
5th Edition, December 2009
PDF.
5.1 Edition, June 2011
HTML.
6th Edition, June 2015
HTML.
7ᵗʰ Edition, June 2016
HTML.
8th edition, June 2017
HTML.
9th Edition, 2018
HTML.
注意 « ECMAScript第 4 版由于工作不完整而未发布。
JSON 为结构化数据的可移植表示定义了一小组格式化规则。
► 必须引用键值,键只允许使用字符串。如果您使用 String 以外的内容,它将转换为 String。但不建议使用字符串以外的键。检查一个这样的例子 -{ 'key':'val' }
结束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 字符串非常相似。字符串应该用双引号括起来。
- 文字是您在脚本中按字面提供的固定值,而不是变量。
- 字符串是由带有反斜杠转义的引号包裹的零个或多个字符的序列,与大多数编程语言中使用的符号相同。
- - 字符串中允许使用特殊符号,但不建议使用。
- " - 可以转义特殊字符。但不建议转义 (') 单引号。在严格模式下,它会抛出错误 -
SyntaxError: Unexpected token ' in JSON
{ "Hai\" \n Team ":5, "Bye \'": 7 }
通过在线 JSON 版本检查此代码。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引用,并且添加到对象原型的属性通过继承由共享原型的所有对象共享。