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的普通 ...
随机推荐
- cisco通过控制口或者通过远程配置交换机
学而不思则罔,思而不学则殆,每天坚持一小步,则成功一大步 下面我们通过Cisco Packet来模拟交换机和路由器的远程和控制台登录配置交换机. 交换机console口的连接与配置方法 (1),在Ci ...
- Java项目经验
Java项目经验 转自CSDN. Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的 ...
- Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel
Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel Ext.Net GridPanel 有两种编辑模式:编辑单元格和编辑行. 单元格编辑: 行编辑: 可以看出,单元格编辑的时候,只 ...
- ###《Machine Learning in Action》 - KNN
初学Python:理解机器学习. 算法是需要实现的,纸上得来终觉浅. // @author: gr // @date: 2015-01-16 // @email: forgerui@gmail.com ...
- Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)
转载请务必注明出处(all copyright reserved by iOSGeek) 本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina ...
- C# 高精度乘法 支持小数(待优化)
将N*N乘法转化为(N*n1)+(N*n2)....(N*nn) 乘完后在补充小数点 public static char[] Quadrature(string a, string b) { ] { ...
- SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法
用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...
- 高能物理/HyperPhysics的网站/Website
参考: 基础物理-高能物理[Hyperphysics]
- Famount game manufacuters
一.Valve「美国」 1.Valve「中文意:阀门」の来源 REFRE.Valve官网 REFER.a history of valve's opening logos REFER.theguyin ...
- 桶排序(BucketSort)
1 桶排序核心思想是 根据数据规模n划分 m个相同大小的区间 (每个区间为一个桶,桶可理解为容器) 2 每个桶存储区间内的元素(区间为半开区间 例如[0,10) 或者 [200,300) ) 3 将n ...