这几天在用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. Java 与 Python 的对比

    最近在学习Python, 现在写一个Python程序和Java程序进行对一下比,以此展示各自不同的特点.这个程序的功能是计算([n, m) )之间的闰年.     Python程序如下: def fu ...

  2. C++ 中的“ !” 运算

    在介绍“ !”运算之前,我们要知道一个变量n,如果n>0,那么我们可以在逻辑上叫它“真”,如果n<=0 ,那么我们可以在逻辑上叫它“假”. n为真时,!n就为假(false),转换为整型值 ...

  3. 菜鸟的MySQL学习笔记(一)

    本学习笔记是照搬慕课网<与MySQL的零距离接触>内容,特此感谢! 1-1 mysql的安装与配置 Windows环境下的MSI安装: 1.安装: 双击MSI文件->用户协议-> ...

  4. js 框架都有哪几种(转载)

    目前来看,js框架以及一些开发包和库类有如下几个,Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fxD ...

  5. css部分基础归纳--学习笔记

    (1)css不区别大小写: (2)颜色值:颜色值可以写成RGB格式,如:color:rgb(255,100,0),也可以写成十六进制格式,如:color:#ff0000.如果十六进制的值是成对重复的可 ...

  6. 谈谈我对OAuth的理解

    自己的理解是,OAuth是一种授权标准.   用于为除了用户之外的第三方应用授权,   并且在授权过程中,第三方应用不会接触到用户的任何信息,   授权完成后,第三方应用可访问用户授权范围内的信息. ...

  7. Spring 官方下载地址(非Maven)

    现在spring的官网停止了使用zip包下载,只能使用maven,非常的不方便,分享如下网址可以使用zip包下载,是不是方便多了!~ 下载列表如下: spring-framework-3.2.8.RE ...

  8. MVC 中 使用TagBuilder扩展HtmlHelper

    TagBuilder就是标签建造器,我们就用它来建造属于我们自己标签生成函数. 无废话,直接上代码 例: using System.Web.Mvc; public static class HtmlE ...

  9. uCOS-II任务的挂起和恢复

    函数描述 OSTaskSuspend() 功能描述:无条件挂起一个任务.调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身.函数原型:INT8U OSTaskSuspend ( ...

  10. SDC(5)–FPGA系统级同步输入的约束

    此时计算最大/最小输入延时时,是不应该考虑FPGA本身的tSU/tH的,因为数据进来之后不一定马上送到DFF. 例如: 此时约束如下: