[JavaScript] (Day-13) - JSON 数据交
2017-07-01 本文已影响9人
已重置2020
Discontent is the first step in progress.
不知足是前进中的第一步。
JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。
JSON 实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:
- number:和 JavaScript 的
number
完全一致; - boolean:就是 JavaScript 的
true
或false
; - string:就是 JavaScript 的
string
; - null:就是 JavaScript 的
null
; - array:就是 JavaScript 的
Array
表示方式——[]
; - object:就是 JavaScript 的
{ ... }
表示方式。
JSON 还定死了字符集必须是UTF-8
,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号""
,Object
的键也必须用双引号""
JavaScript 内置了 JSON 的解析
序列化
对象序列化成
JSON
格式的字符串
var person = {
name: "Eric",
age: 28,
gender: "Male",
height: 1.65,
grade: null,
married: true
childs: ["Baby","Vicy"]
};
JSON.stringify(person); // '{"name":"Eric","age":28,"gender":"Male","height":1.65,"grade":null,married: true,"childs":["Baby","Vicy"]}'
要输出得好看一些,可以加上参数,按缩进输出:
JSON.stringify(person, null, ' ');
{
"name": "Eric",
"age": 28,
"gender": "Male",
"height": 1.65,
"grade": null,
"married": true
"childs": [
"Baby",
"Vicy"
]
}
第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array
:
JSON.stringify(person, ["name", "childs"], ' ');
{
"name": "Eric",
"childs": [
"Baby",
"Vicy"
]
}
还可以传入一个函数,这样对象的每个键值对都会被函数先处理:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(person, convert, ' ');
{
"name": "ERIC",
"age": 28,
"gender": "MALE",
"height": 1.65,
"grade": null,
"married": true
"childs": [
"BABY",
"VICY"
]
}
反序列化
JSON
格式的字符串,我们直接用JSON.parse()
把它变成一个JavaScript
对象
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"Vivian","age":18}'); // Object {name: "Vivian", age: 18}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
JSON.parse()
还可以接收一个函数,用来转换解析出的属性:
JSON.parse('{"name":"Vivian","age":18}', function (key, value) {
// 拼接知道字符串
if (key === "name") {
return value + " is beautiful";
}
return value;
}); // Object {name: "Vivian is beautiful", age: 18}