区分
JSON(JavaScript Object Notation)仅仅是一种数据花样(或许叫数据情势)。数据花样实在就是一种范例,根据这类范例来存诸和交换数据。就好像 XML 花样一样。
区分 | Json | Javascript对象 |
---|---|---|
寄义 | 仅仅是一种数据花样 | 对象的实例 |
传输 | 能够跨平台数据传输,速率快 | 不能传输 |
表现 | 1. 键值对 2. 键必需加双引号 3. 值不能为要领函数/undefined/NaN | 1.键值对 2.值能够是函数、对象、字符串、数字、boolean 等 |
互相转换 | Json → JS 对象: 1. var obj = JSON.parse(jsonstring); 2. var obj = eval("("+jsonstring+")"); | JS 对象 → Json:JSON.stringify(obj); |
JSON 文本花样在语法上与建立 JavaScript 对象的代码雷同,但实质是差别的。我们不能把以下的对象叫 JSON,比方:
var obj1 = {}; // 这只是 JS 对象
// 可把这个称做:JSON 花样的 JavaScript 对象
var obj2 = {"width":100,"height":200,"name":"rose"};
// 可把这个称做:JSON 花样的字符串
var str1 = '{"width":100,"height":200,"name":"rose"}';
// 这个可叫 JSON 花样的数组,是 JSON 的稍庞杂一点的情势
var arr = [
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
];
// 这个可叫稍庞杂一点的 JSON 花样的字符串
var str2='['+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
']';
但 JSON 和 JavaScript 确切存在渊源,JSON 自身的意义就是 JavaScript 对象示意法(JavaScript Object Notation),能够说这类数据花样是从 JavaScript 对象中演变出来的。JSON 语法是 JavaScript 对象示意法语法的子集。
JSON 花样的数据,重要是为了跨平台交换数据用的。JSON 独立于言语和平台,JSON 剖析器和 JSON 库支撑很多差别的编程言语。
语法
1、JSON 语法划定规矩:
数据在称号/值对中
数据由逗号分开
花括号保留对象
方括号保留数组
2、JSON 数据值:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
JSON 数据构造有两种,这两种构造就是对象和数组,经由过程这两种构造能够示意种种庞杂的构造。
JSON 运用严厉的 JavaScript 对象示意法来示意构造化的数据,因而 JSON 的属性名必需有双引号。
{
"company": "Apple",
"age": 18,
"IPO", true,
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
数据转换
JSON 数据转换为 JS 对象
1、JS 剖析器:eval() 函数
// 建立包括 JSON 语法的 JavaScript 字符串
var txt = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
//运用 JS 剖析器,剖析 JSON 文本并天生 JS 对象
var obj = eval("(" + txt + ")");
运用 eval() 函数时,必需为传入的 JSON 数据参数增加括号'()’,不然会报语法错误。
2、 剖析器:parse()函数
但 eval() 的问题在于,除了能够剖析 JSON 数据,也能够用于实行 JavaScript 剧本片断,这就会带来潜伏的安全问题。JSON 供应了特地的 JSON Parser 来完成只用于剖析 JSON 数据,不会实行 JavaScript 剧本,而且速率更快。以下:
var obj = JSON.parse(txt);
较新的浏览器和最新的 ECMAScript (JavaScript) 规范中均包括了原生的对 JSON 的支撑。
JS 数据转换为 JSON 文本
运用 JSON.strigify() 函数,将 Javascript 对象转换为 JSON 文本数据。
var obj = {a:1,b:2}
var txt = JSON.stringify(obj);
console.log(txt);
效果:
"{"a":1,"b":2}"