浅谈Json解析与序列化

从头说起:

首先的首先,什么是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序列化


Json.stringify()

作用:序列化原始值、对象、数组

语法:JSON.stringify(value [, replacer] [, space])

参数:

        value:要转换成JSON字符串的原始值、对象或数组

   replacer:可选参数,一个数组或函数

   space:可选参数,一个数值或一个字符串

返回:JSON格式的字符串,代表value的值,同时通过了replacer的过滤,以及根据space进行了格式化


成功将 json对象转化为json字符串。


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}
结果如图:

如果不加第三个参数的话效果:


二、JSON解析

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

作用是将json字符串转化为json对象 
类型变化 :String -> Object

JSON.parse()方法也接收另一个参数,该参数是一个函数,为了区别JSON.string()接收的过滤函数,这个函数被叫做还原函数(reviver),实际上两个函数的键值是相同的——他们都接受两个参数,并且都需要返回一个值。

提供几个写得比较清楚的博客链接:
json解析与序列化
Json解析与序列化
打开链接

你可能感兴趣的:(JavaScript)