这几天在用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学习的更多相关文章

  1. fastjson学习笔记

    先来说说什么是 JSON 吧. JSON:JavaScript对象表示法(JavaScript Object Notation).JSON 是存储和交换文本信息的语法.JSON 语法是 JavaScr ...

  2. FastJson学习:JSON格式字符串、JSON对象及JavaBean之间的相互转换

    当前台需要传送一系列相似数据到后端时,可以考虑将其组装成json数组对象,然后转化为json形式的字符串传输到后台 例如: nodes = $('#PmPbsSelect_tree').tree('g ...

  3. springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用

    springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用 主要内容: 这篇文章主要是总结之前使用springmv接收json的时候遇到的问题,下面通过前台发送a ...

  4. 【FastJson】使用学习

    FastJson使用学习 1.json转object.object转json List<CompanyLoopPicture> list = new ArrayList<Compan ...

  5. Fastjson JdbcRowSetImpl利用链学习

    JdbcRowSetImpl 接着继续学习fastjson的第二条链JdbcRowSetImpl,主要是利用jndi注入达到的攻击,而且没有什么利用限制,而且其原理就是setter的自动调用,具体se ...

  6. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  7. [Java学习] JSON工具学习记录--FastJSON

    最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...

  8. fastjson反序列化漏洞历史CVE学习整理

    fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...

  9. com.alibaba.fastjson.JSONObject学习

    JSONObject json = new JSONObject(); //设置json属性,可以是对象,数值 json.put("key",value); //获取json的普通 ...

随机推荐

  1. croppic 图片裁剪

    #region 3.1.3 保存裁剪后的图片方法 +ContentResult TemplateCropImg() /// <summary> /// 保存裁剪后的图片方法 /// < ...

  2. myeclipse 右键 Add Struts... 页面报404 错误

    网上试了很多种方法都不对,结果老师两下点出来了 我的改正方法是: 将WebRoot/WEB-INF/web.xml中的 <url-pattern>/*</url-pattern> ...

  3. (int)、(int&)和(int*)的区别(转)

    (1).首先通过一个例子看(int)和(int&)的区别: float a = 1.0f;cout << (int)a << endl;cout << (i ...

  4. 九度OJ 1511 从尾到头打印链表

    题目地址:http://ac.jobdu.com/problem.php?pid=1511 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测 ...

  5. Poj 1006 / OpenJudge 2977 1006 Biorhythms/生理周期

    1.链接地址: http://poj.org/problem?id=1006 http://bailian.openjudge.cn/practice/2977 2.题目: Biorhythms Ti ...

  6. JS实现div块的拖放,调换位置

    主要是HTML5 的拖放(Drag 和 Drop) 例子(不需要对div设置ID): <!DOCTYPE HTML> <html> <head> <scrip ...

  7. 使用json方式实现省市两级下拉级联菜单[原创]

    本文为博主原创,转载请注明. 首先看一下实现后的效果图: 当然,要完成这个实验,mysql必须与数据库连接,这里选用navicat for mysql这款软件,它与mysql的契合度是很高的,配置环境 ...

  8. Yii 通过widget小物件生成添加表单

    通过widget小物件创建添加商品的表单 视图里,表单以endWidget();?>结束 最终效果: 把表单提交过来的信息保存到数据库中去. 补充要点: 密码表单: <?php echo ...

  9. java感触一则

    看到开源中国上边有那么多关于java的开源项目,从数据库到3D游戏再到IDE工具,甚至有iQQ,形形种种都是一些比较成熟的,工程很大的项目.才意识到Java是如此的强大和流行. 这么多开源的代码我不可 ...

  10. 【转】SQL2008清除日志

    USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET ...