FastJSON学习
这几天在用FastJSON,发现需要测试一些关键点,包括:
1、是否支持内部类:测试结果是支持,但是需要设置为静态类(static)
2、是否支持继承的自动序列化及反序列化:测试结果是支持
3、缺字段或者多出字段时,反序列化(JSON.parseObject)是否会崩溃:测试结果是不会,对应的成员会保持默认值
下面贴出程序:
package com.test.fastJSON; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import com.alibaba.fastjson.JSON; public class Main {
//父类
static class Parent implements Serializable {
private static final long serialVersionUID = 1L; private String title; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
}
} //子类1
static class Child1 extends Parent implements Serializable {
private static final long serialVersionUID = 1L; private List<String> extra; private int index = -1; public List<String> getExtra() {
return extra;
} public void setExtra(List<String> extra) {
this.extra = extra;
} public int getIndex() {
return index;
} public void setIndex(int index) {
this.index = index;
}
} //子类2
static class Child2 extends Parent implements Serializable {
private static final long serialVersionUID = 1L; private ExtraStruct extra; public ExtraStruct getExtra() {
return extra;
} public void setExtra(ExtraStruct extra) {
this.extra = extra;
}
} //子类2嵌套类
static class ExtraStruct implements Serializable {
private static final long serialVersionUID = 1L; private String key;
private String value; public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
} /**
* @param args
*/
public static void main(String[] args) {
//测试序列化
Child1 c1 = new Child1();
c1.setTitle("c1");
c1.setIndex(123);
c1.setExtra(new ArrayList<String>());
c1.getExtra().add("111");
c1.getExtra().add("222"); Child2 c2 = new Child2();
c2.setTitle("c2");
c2.setExtra(new ExtraStruct());
c2.getExtra().setKey("k");
c2.getExtra().setValue("v"); System.out.println(JSON.toJSONString(c1));
System.out.println(JSON.toJSONString(c2));
System.out.println("======================"); //测试反序列化
String s1 = "{\"extra\":[\"111\",\"222\"],\"title\":\"c1\",\"index\":123}";
String s2 = "{\"extra\":{\"key\":\"k\",\"value\":\"v\"},\"title\":\"c2\"}"; Child1 cc1 = JSON.parseObject(s1, Child1.class);
Child2 cc2 = JSON.parseObject(s2, Child2.class); System.out.println(JSON.toJSONString(cc1));
System.out.println(JSON.toJSONString(cc2));
System.out.println("======================"); //测试缺字段情况
s1 = "{\"extra\":[\"111\",\"222\"]}";
s2 = "{\"extra\":{\"key\":\"k\"},\"title\":\"c2\"}"; cc1 = JSON.parseObject(s1, Child1.class);
cc2 = JSON.parseObject(s2, Child2.class); System.out.println(JSON.toJSONString(cc1));
System.out.println(JSON.toJSONString(cc2));
System.out.println("======================"); //测试多出字段情况
s1 = "{\"extra\":[\"111\",\"222\"],\"title\":\"c1\",\"tt\":\"111\"}";
s2 = "{\"extra\":{\"key\":\"k\",\"value\":\"v\",\"tt\":\"111\"},\"title\":\"c2\"}"; cc1 = JSON.parseObject(s1, Child1.class);
cc2 = JSON.parseObject(s2, Child2.class); System.out.println(JSON.toJSONString(cc1));
System.out.println(JSON.toJSONString(cc2));
System.out.println("======================");
} }
下面是运行结果:
{"extra":["111","222"],"index":123,"title":"c1"}
{"extra":{"key":"k","value":"v"},"title":"c2"}
======================
{"extra":["111","222"],"index":123,"title":"c1"}
{"extra":{"key":"k","value":"v"},"title":"c2"}
======================
{"extra":["111","222"],"index":-1}
{"extra":{"key":"k"},"title":"c2"}
======================
{"extra":["111","222"],"index":-1,"title":"c1"}
{"extra":{"key":"k","value":"v"},"title":"c2"}
======================
FastJSON学习的更多相关文章
- fastjson学习笔记
先来说说什么是 JSON 吧. JSON:JavaScript对象表示法(JavaScript Object Notation).JSON 是存储和交换文本信息的语法.JSON 语法是 JavaScr ...
- FastJson学习:JSON格式字符串、JSON对象及JavaBean之间的相互转换
当前台需要传送一系列相似数据到后端时,可以考虑将其组装成json数组对象,然后转化为json形式的字符串传输到后台 例如: nodes = $('#PmPbsSelect_tree').tree('g ...
- springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用
springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用 主要内容: 这篇文章主要是总结之前使用springmv接收json的时候遇到的问题,下面通过前台发送a ...
- 【FastJson】使用学习
FastJson使用学习 1.json转object.object转json List<CompanyLoopPicture> list = new ArrayList<Compan ...
- Fastjson JdbcRowSetImpl利用链学习
JdbcRowSetImpl 接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体se ...
- FastJson远程命令执行漏洞学习笔记
FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...
- [Java学习] JSON工具学习记录--FastJSON
最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...
- fastjson反序列化漏洞历史CVE学习整理
fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...
- com.alibaba.fastjson.JSONObject学习
JSONObject json = new JSONObject(); //设置json属性,可以是对象,数值 json.put("key",value); //获取json的普通 ...
随机推荐
- oracle学习(1)
1.安装完oracle数据库后,远程第一次无法登陆,需要进入sys用户后,更改以此后才有效. 2.TNS去读取配置的时候,如果在环境变量中已经配置了 TNS_ADMIN 后,则直接从此目录下读取. 3 ...
- UITableViewCell左滑的时候添加多个按钮的方法(iOS8+)以及UIRefreshControl(iOS6+)的使用。
之前想在cell左滑的时候添加更多的按钮而不是只有‘删除’按钮如下所示,貌似不是一件简单的事.但是现在只要实现几个方法就行了. 代码写的比较垃圾,重在理解这个知识.. . 具体代码: // // T ...
- unity发布ios游戏总结
自己做了几个ios的小游戏,因此总结了一点经验 判断按钮要用unity里面的button不要用OnMouseDown()之类的函数,否则拒绝原因为缺少ios特征 排行榜之类的本地存储数据,不要用本地本 ...
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...
- 高并发编程陷阱之check and set
今天公司CTO跟隔壁部门开技术会,旁听了一下.所讲的内容感觉好高大上啊!简单记录一下 场景是这样的: if(check(id)===true) { }else{ set(id); } 什么意思呢? 就 ...
- Apache(一)
以下介绍是基于centos,Apache/2.2.15,进行解释 (资料来自www.netcraft.com) Apache 模块化的软件 Apache=core+module(内核+模块) core ...
- Linux查找软件的安装路径
软件安装的路径可能不止一个,可以使用whereis命令查看软件安装的所有路径,以mysql为例: whereis mysql 该命令会返回软件的所有安装路径: mysql: /usr/bin/mysq ...
- lsof作用
lsof 卸载移动存储时经常提示device busy,也可能误删了一个正在打开的文件.... 这时候可以试试lsof lsof简介 lsof(list open files)是一个列出当前系统打 ...
- Cassandra1.2文档学习(10)—— 插入和更新数据
参考数据:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- php查询ip地址来源归属地的脚本
<?php header('Content-Type:text/html;charset=utf-8'); if($_GET['sub']){ $ip = $_GET['ip']; $msg = ...