JSON 总结
JSON 全称为 JavaScript Object Notation,被设计出来用于结构和标准化数据,他现在已经被很多语言所使用,他们都有针对JSON的解析器和序列化器。
-
JSON的格式:
可以表示简单值,数组和对象 双引号包括主变量名和值 -
JSON的解析和序列化:
JSON.stringify() 对象-》JSON string
JSON.parse() JSON string -》对象 -
JSON.stringify() 第二个参数若为字符数组,可以使用其字符数组的方式来过滤结果
JSON.stringify() 第二个参数若为函数,可以通过在尾部加入字符数组的方式来修改生成的结果
JSON.stringify() 第三个参数用于控制结果中的缩进的空白符 -
toJSON()方法: 可以通过给任意对象定义toJSON方法来进行自定义序列化。
-
JSON.stringify方法流程:
<1> 如果存在toJSON方法而且能够取通过他取得有效的值,调用该方法。
<2> 如果提供第二个参数,应用该过滤器,传入的函数是第一步返回的值
<3> 对第二步的过滤后的值进行序列化
<4> 根据第三个参数进行格式化 -
JSON.parse(): 方法可以接收另一个参数,这个参数为一个函数,
<1> 如果该函数返回undefined,则删除对应的键;
<2> 如果该函数返回值,则将该值插入到结果。该方法可用来对指定数据进行自定义修改
对于该方法,通过一个需求可以解释:
如果我在读JSON数据的时候,有一条消息是读取日期Date,我想要每次读取该JSON字符串时,该键值应该更新为当前读取时间,而不是JSON字符串中的键值,这样,这个函数可以轻易实现。如下:
<!DOCTYPE html>
<html>
<head>
<title>JSON Parse Example</title>
</head>
<body>
<p>This example parses a string containing a date into an object.</p>
<script type="text/javascript">
var book = {
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
"edition": 3,
"year": 2011,
"releaseDate": new Date(2011, 0, 1)
};
var jsonText = JSON.stringify(book);
alert(jsonText);
var bookCopy = JSON.parse(jsonText, function(key, value){
if (key == "releaseDate"){
return new Date();
} else {
return value;
}
});
alert(bookCopy.releaseDate);
</script>
</body>
</html>