利用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<T> temp= JSON.parseObject(fastjson,T.class);
2、parseArray[將 json字符串 反序列化為 java.util.List]
//transform the json to List<T>
-fastjson 為 json格式的字符串(String類型) -List< T> 為 與 json格式對應的 自定義 java.util.List。 @sherineZJU List<T> oldk = JSONArray.parseArray(fastjson,T.class);
注意:json字符串的關鍵字一定要與 java.class 中的對應變量名相同
實例1:JSON轉化為HashMap&ArrayList
【0】首先在Maven中引入fastjson(pom.xml中引入依賴)
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.0.4</version> </dependency>
注:若未應用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 class PlatformModel { private String id; private String name; private String platcode; //增加get/set方法 }
【2】定義測試方法
public class Test { 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<String, PlatformModel> platformMap = new HashMap<>(); //存儲集合的ArrayList private ArrayList<PlatformModel> platformList = new ArrayList<>(); //轉換字符串為Java對象集合(HashMap存儲) private Map<String, PlatformModel> getPlatformMap() { JSONArray platformArray = JSON.parseArray(platforms); for (Object jsonObject : platformArray) { PlatformModel platformModel = JSONObject.parseObject(jsonObject.toString(), PlatformModel.class); platformMap.put(platformModel.getId(), platformModel); } return platformMap; } //轉換字符串為Java對象集合(ArrayList存儲) private ArrayList<PlatformModel> getPlatformList() { JSONArray platformArray = JSON.parseArray(platforms); for (Object jsonObject : platformArray) { PlatformModel platformModel = JSONObject.parseObject(jsonObject.toString(), PlatformModel.class); platformList.add(platformModel); } return platformList; } public static void main(String[] args) { Test test = new Test(); test.getPlatformMap(); test.getPlatformList(); }
【3】輸出結果
&&
項目實例實現:獲取屬性文件JSON值,並轉換成對象返回前端(用戶菜單權限)
Step1:定義實體類
//用戶賬號表 public class AccountUser implements Serializable { private static final long serialVersionUID = 7247714666080613254L; private String pin; private String traceaccount; private Boolean isAdmin; private List<Menu> menus; //增加get/set方法 }
//菜單表 public class Menu { private String type; private String index; private String name;//菜單名 private boolean expanded; private String icon; private String link; private List<Menu> children;//子菜單 //增加get/set方法 }
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 implements ConfigDomainInitBean, java.io.Serializable{ private String menus= PropertyConfigurer.getProperty("menus"); //menus的get/set方法 //重寫toString()方法 }
Step4:將JSON轉化為對象返回【核心】
public AccountUser getAccountUser(String pin) { /* 1.根據pin獲取traceaccount 2.判斷traceaccount是否存在,若存在則獲取該pin是否是管理員身份 3.根據pin獲取是否是管理員 4.根據pin獲取menu權限 */ AccountUser accountUser = new AccountUser(); //驗證是否具有訪問系統權限 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> menus= new ArrayList<>(); for (Object jsonObject : menuArray) { Menu menu = JSONObject.parseObject(jsonObject.toString(), Menu.class); menus.add(menu); } accountUser.setMenus(menus); } } } return accountUser; }