利用fastjson反序列化json为对象和对象数组
利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
【主要特点】
1、快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
2、强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
3、零依赖(没有依赖其它任何类库除了JDK) —— [ 开源中国社区]
一、反序列化函数
1、parseObject [将 json字符串 反序列化为 java.class]
//transform the json to T
-fastjson 为 json格式的字符串(String类型)
-T 为 与 json格式对应的自定义java.class
@sherineZJU
List temp= JSON.parseObject(fastjson,T.class);
2、parseArray[将 json字符串 反序列化为 java.util.List]
//transform the json to List
-fastjson 为 json格式的字符串(String类型)
-List< T> 为 与 json格式对应的 自定义 java.util.List。
@sherineZJU
List oldk = JSONArray.parseArray(fastjson,T.class);
注意:json字符串的关键字一定要与 java.class 中的对应变量名相同
实例1:JSON转化为HashMap&ArrayList
【0】首先在Maven中引入fastjson(pom.xml中引入依赖)
com.alibaba
fastjson
1.0.4
注:若未应用Maven,可以下载Jar包
http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.0.4/fastjson-1.0.4.jar
http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.0.4/fastjson-1.0.4-sources.jar
【1】定义实体类
//定义实体类
public classPlatformModel {privateString id;privateString name;privateString platcode;//增加get/set方法
}
【2】定义测试方法
public classTest {
String platforms= "[{'id':'0','name':'A','platcode':'p1'}," +
"{'id':'1',name:'B','platcode':'p2'}," +
"{'id':'2',name:'C','platcode':'p3'}," +
"{'id':'3',name:'D','platcode':'p4'}]";//其中key为id,值为对象自己
private Map platformMap = new HashMap<>();//存储集合的ArrayList
private ArrayList platformList = new ArrayList<>();//转换字符串为Java对象集合(HashMap存储)
private MapgetPlatformMap() {
JSONArray platformArray=JSON.parseArray(platforms);for(Object jsonObject : platformArray) {
PlatformModel platformModel= JSONObject.parseObject(jsonObject.toString(), PlatformModel.class);
platformMap.put(platformModel.getId(), platformModel);
}returnplatformMap;
}//转换字符串为Java对象集合(ArrayList存储)
private ArrayListgetPlatformList() {
JSONArray platformArray=JSON.parseArray(platforms);for(Object jsonObject : platformArray) {
PlatformModel platformModel= JSONObject.parseObject(jsonObject.toString(), PlatformModel.class);
platformList.add(platformModel);
}returnplatformList;
}public static voidmain(String[] args) {
Test test= newTest();
test.getPlatformMap();
test.getPlatformList();
}
【3】输出结果
&&
项目实例实现:获取属性文件JSON值,并转换成对象返回前端(用户菜单权限)
Step1:定义实体类
//用户账号表
public class AccountUser implementsSerializable {private static final long serialVersionUID = 7247714666080613254L;privateString pin;privateString traceaccount;privateBoolean isAdmin;private List
}
//菜单表
public classMenu {privateString type;privateString index;private String name;//菜单名
private booleanexpanded;privateString icon;privateString link;private List
}
Step2:配置属性文件menus值
//在config.porperties中引入JSON值,JSON值可用JSON压缩转义工具压缩为1行
menus=[{
type:'group',
index:'menu1_1',
name:'菜单A',
expanded:false,
children: [{
type:'link-item',
index:'menu1',
name:'菜单A-1,
expanded: false,
icon:'area-chart',
link:'/menu1',
children: []
}, {
type:'link-item',
index:'menu2',
name:'菜单A-2',
expanded:false,
icon:'phone',
link:'/menu2',
children: []
}, ]
}]
Step3:获取属性文件值
//框架自定义方式
public class SwitchConfigBean extends BaseConfig implementsConfigDomainInitBean, java.io.Serializable{private String menus= PropertyConfigurer.getProperty("menus");//menus的get/set方法//重写toString()方法
}
Step4:将JSON转化为对象返回【核心】
publicAccountUser getAccountUser(String pin) {/*1.根据pin获取traceaccount
2.判断traceaccount是否存在,若存在则获取该pin是否是管理员身份
3.根据pin获取是否是管理员
4.根据pin获取menu权限*/AccountUser accountUser= newAccountUser();//验证是否具有访问系统权限
if(ArrayUtils.contains(ResourceContainer.switchConfigBean.getSystemPrivilegers(), pin)){
String traceaccount=accountUserMapper.getTraceAccountByPin(pin);if (traceaccount != null) {
accountUser.setPin(pin);
accountUser.setTraceaccount(traceaccount);//验证当前登录PIN是否为管理员身份
if(ArrayUtils.contains(ResourceContainer.switchConfigBean.getPrivilegers(), pin)) {
accountUser.setAdmin(true);
}else{
accountUser.setAdmin(false);
}//根据pin获取菜单权限,先从配置文件获取菜单权限
JSONArray menuArray =JSON.parseArray(ResourceContainer.switchConfigBean.getMenus());if(!menuArray.isEmpty()){
ArrayList
Menu menu= JSONObject.parseObject(jsonObject.toString(), Menu.class);
menus.add(menu);
}
accountUser.setMenus(menus);
}
}
}returnaccountUser;
}