json为java对象配置一个函数_Java基础/利用fastjson反序列化json为对象和对象数组...

利用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】输出结果

ed26e9e972efa57c0ce323f2d6b735e89f0.jpg&&

c5efffbdca31dfd216d0c2ebccd7d825337.jpg

项目实例实现:获取属性文件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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值