zoukankan      html  css  js  c++  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<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;
        }
  • 相关阅读:
    sql学习之1-create、select
    mysql利用binlog日志恢复数据库小实验
    vmware 存储路径
    ubuntu基本命令
    Java编程规范整理
    种菜之旅
    modSecurity规则学习(五)——DDOS攻击检测
    modSecurity规则学习(三)——SecRule
    modSecurity规则学习(二)——配置文件
    modSecurity规则学习(一)——配置文件
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/8323803.html
Copyright © 2011-2022 走看看