Ajax之JSON的序列化(基于js的ajax)

本文详细介绍了JSON,包括其定义、与XML的转换、规则,以及在Ajax中的应用。讨论了JSON的序列化和反序列化,特别是在JavaScript和Java中的实现,包括JSON.stringify()和JSON.parse()的使用,同时还提供了Java和JavaScript的序列化与反序列化案例。
摘要由CSDN通过智能技术生成

JSON
一、什么是JSON?
二、XML与Json的的转换:
三、json的规则
html 请求数据三种方式
四、JSON的序列化
1.java的json序列化
2.java的json反序列化
3.JavaScript的json序列化
4.JavaScript的json反序列化
案例1:java的json序列化和反序列化
案例二:JavaScript的json序列化和反序列化

JSON

一、什么是JSON?

中午肚子饿了,到餐厅点餐。向服务员点了几个菜,厨师根据用户的需求,开始烹饪食物,食物烹饪好后,怎么将食物呈现给用户呢?这时就需要用到盛放食物的碗了用户拿到盛放食物的碗,就可以获得点的餐了这个碗就充当了数据交换的容器了。
JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

二、XML与Json的的转换:

1.常规转换

<emp>
    <name>fxhl</name>
    <city>深圳</city>
    <age>23</age>
</emp>

转换为的Json的为:

{“name”:“fxhl”,“city”:“深圳”,“age”:23}

三、json的规则

JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。JSON的表现形式一般就三种(对象,数组,字符串)
规则如下:
1)映射用冒号(“:”)表示。名称:值
2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
4) 并列数据的集合(数组)用方括号(“[]”)表示。

1.对象:
var o1={
        "returnCode": "R0000",
        "returnMsg": "成功",
        "lessTimes": "2",
     }
2.数组:
[
   {属性1:值,属性2:值2},
   {属性1:值,属性2:值2}
]
var o2={
        "employees": [
            { "firstName":"John" , "lastName":"Doe" },
            { "firstName":"Anna" , "lastName":"Smith" }
        ]
}
3.数组对象混合:
var o3={
    "icon": [
        {
            "title": "尚天猫,就购了",
            "innerText": "天猫宝贝",
            "url": "//www.tmall.com/"
        },
        {  
            "title": "保险理赔",
            "position": "99",
            "innerText": "分组-保险理赔",
            "iconPopupComplex": 
            {
                    "popup_title": "保险理赔",
                    "subIcons": [
                            {
                                "dom_class": "icon-service-yunfeixian",
                                "icon_content": "卖家赠送退货运费险"
                            }
                    ]
                }
         }     
    ]
}


html 请求数据三种方式

query string
form data
payload

四、JSON的序列化

JSON支持text/plain和application/json两种类型格式

1.java的json序列化
fastjson阿里巴巴、jackson spring默认的 、jsonlib、gson……
ObjectMapper
writerXxxx
writeValueAsString()
2.java的json反序列化

ObjectMapper类
 - List item
 - 	readValue() 单一对象的反序列化
ObjectMapper mapper=new ObjectMapper();
mapper.readValue(req.getInputStream(), User.class);
TypeFactory 集合对象的反序列化
- constructXxxxx		
- constructCollectionType(List.class, User.class)

ObjectMapper mapper=new ObjectMapper();
JavaType valueType=mapper.getTypeFactory().constructCollectionType(List.class, User.class);
List<User> beans=mapper.readValue(req.getInputStream(), valueType);

3.JavaScript的json序列化

JSON.stringify() 将对象序列化为JSON字符串
默认情况下JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进;此外,值为未定义的任何属性也都会被跳过,结果都是有效的JSON数据类型。

JSON.stringify()的参数

实际上,JSON.stringify()除了要序列化的javascript对象之外,还可以接收两个参数(用于指定以不同方式序列化的JavaScript):1第一个参数是过滤器(可为数组或函数))2。第二个参数是一个选项(表示是否在JSON字符串中保留缩进)

如果过滤器的参数是数组,那么JSON.stringify()的结果将只包含数组中列出的属性。

var x={
   
    	"name":"张三",
    	"parents":["李四","王五"],
    	 edit:3,
    	year:2019
}//注意:第二个数组中的两个字段要与JSON中的属性对应。
var jsionText=JSON.stringify(x,["name","edit"])

jsonText:
"{"name":"张三","edit":3}"



如果第二个参数是函数(传入的函数接收两个属性,属性(键)名和属性值):	
var jsonText=JSON.stringify(x,function(key,value){
   
    	switch(key){
   
        case "parents":
    			return value.join(",");//中间加一个“,”
        case "year":
    			return 666;
        case "edit":
    			return undefined
        default:
			return value;
	}
})


jsonText:
"{"name":"张三","parents":"李四,王五","year":666}".
可以看到如果键为”name”,通过返回未定义删除该属性。一定要提供默认项,使其他值可以显示在结果中

-----------------------------------------------------------
字符串的缩进	
JSON.stringify()方法的第三个参数用于控制结果的缩进和空白符。如果这个参数是一个树枝那么他表示的是每个级别的缩进空格。	
例:要每个级别缩进4个空格
var jsonText = JSON.stringify(x,null4)
注:最大缩进空格为10,所有大于10的值都会被自动转换为10。

有时候JSON.stringify()不能满足自动序列化的需求。这时就可以给对象定义的toJSON()方法。
toJSON()方法可以作为函数过滤器的补充假设把一个对象传入JSON.stringify(),序列化该对象的顺序:
(1)如果存在的toJSON()方法且能通过它取得有效的值,则调用该方法,否则返回JSON本身。
(2)如果提供了第二个参数,应用这个过滤器,传入过滤器的值是第(1)步返回的值(其实结果就是,上述的jsonText输出结果是toJSON()方法返回的值&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值