从头说起:
首先的首先,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法
Json语法规则:
{ "firstName":"John" , "lastName":"Doe" }
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
或者这样:
var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ];
那什么是对象序列化呢?
专业术语如是解释:
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
通俗讲呢:对象序列化就是指将对象的状态转换为字符串
JSON对象
我们都知道eval()函数可以将Json转换为Javascript对象。Js内建的eavl()函数用Json数据来生成原生的JavaScript对象。
这是早期的Json解析器解析方法,erjson对象有两个方法:stringify()和parse()
这两个方法分别用于将js对象序列化为json字符串和把json字符串解析诶原生的js值
下面来详细说说这两个函数:
Json.stringify()
作用:序列化原始值、对象、数组
语法:JSON.stringify(value [, replacer] [, space])
参数:
value:要转换成JSON字符串的原始值、对象或数组
replacer:可选参数,一个数组或函数
space:可选参数,一个数值或一个字符串
返回:JSON格式的字符串,代表value的值,同时通过了replacer的过滤,以及根据space进行了格式化
<script> var myMes= { "name": "ys", "age": 12 }; console.log(typeof myMes);//Object var jsonText = JSON.stringify(myMes); console.log(typeof jsonText);//String </script>
1、json数据过滤
a.如果过滤器参数是数组,那么JSON.stringify()结果中将只包含数组中列出的属性。
var myMes = { "name": "ys", "age": 12, "like": "drink", "nationality": "China" }; /*实现过滤,只留下name和age*/ var jsonText = JSON.stringify(myMes, ["name", "age"]); console.log(jsonText); //{"name": "ys", "age": 12}
b.如果第二个参数是函数,传入的函数要接收两个参数,再按照相应的需求做出处理
var myMes= { "name": "ys", "age": 12, "like": "drink", "nationality": "China" }; var jsonText = JSON.stringify(myMes, function(key, value){ switch(key){ case "name": return "名字改变了"; default: return value; } }, 4); console.log(jsonText);
2.字符串缩进
第三个参数就是用来实现字符串缩进的,数字几就表示缩进几个空格
var myMes= { "name": "ys", "age": 12, "like": "drink", "nationality": "China" }; var jsonText = JSON.stringify(myMes, ["name", "age"], 4); console.log(jsonText);//{"name": "ys", "age": 12}结果如图:
如果不加第三个参数的话效果:
1.作用
解析JSON格式的字符串
2.语法
JSON.parse(s[, reviver])
3.参数
s,要解析的字符串
reviver,可选参数,用来转换解析值的可选函数
4.返回
一个对象、数组或原始值。该返回值是从s中解析的(还有可能被reviver修改过);
var myMes= { "name": "ys", "age": 12 }; console.log(typeof myMes);//Object //为了模拟json字符串 var jsonText = JSON.stringify(myMes); console.log(typeof jsonText);//String var jsonObj = JSON.parse(jsonText); console.log(typeof jsonObj);//Object