• java FastJSON的使用


    1.JSON介绍

    JSON(javaScript Object Notation)是一种轻量级的数据交换格式。主要采用键值对({"name": "json"})的方式来保存和表示数据。JSONJS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质上是一个字符串。

    2.FastJson简介

    fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

    3.fastjson的优点

    (1)速度快:fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

    (2)使用广泛:fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

    (3)测试完备

    (4)功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

    4.fastjson的使用

    (1)引入相应版本的fastjson的jar包(即对java工程添加依赖)

    下载地址:https://github.com/alibaba/fastjson

    5.使用实例

    (1)javabean

    fastjson在封装成json的时候会自动按照属性名称排序,也就是abcd…的顺序排序。 但是很多时候,我们可能需要json按照我们的顺序输出。

    解决方法:在javabean的成员变量中加入里注解:@JSONField(ordinal = 0) 

    package EntityClass;
    
    import com.alibaba.fastjson.annotation.JSONField;
    
    import java.util.Objects;
    
    public class StudentEntity {
        @JSONField(ordinal = 0)
        private int id;
        @JSONField(ordinal = 1)
        private String name;
        @JSONField(ordinal = 2)
        private Integer age;
        @JSONField(ordinal = 3)
        private String address;
        @JSONField(ordinal = 4)
        private String score;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getScore() {
            return score;
        }
    
        public void setScore(String score) {
            this.score = score;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            StudentEntity that = (StudentEntity) o;
            return id == that.id &&
                    Objects.equals(name, that.name) &&
                    Objects.equals(age, that.age) &&
                    Objects.equals(address, that.address) &&
                    Objects.equals(score, that.score);
        }
    
        @Override
        public int hashCode() {
    
            return Objects.hash(id, name, age, address, score);
        }
    }

    (2)利用hibernate查询数据库中的数据,并返回查询结果集合。

    import EntityClass.EntryFirminfoEntity;
    import EntityClass.StudentEntity;
    import EntityClass.UserEntity;
    import EntityClass.UserinfoEntity;
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.criterion.Restrictions;
    
    import java.util.List;
    
    public class HibernateTest01 {
    
        //根据Android客户端发送的参数,利用hibernate对数据库中的StudentEntity表进行查询,将查询结果放入一个集合返回
        public static List<StudentEntity> queryStudentByUserInput(String studentname, String realAddress, String riskrank){
            //1.创建一个session对象
            Session session1=HibernateTools.getSession();
            //2.通过session的createCriteria创建一个Criteria 对象
            Criteria criteria=session1.createCriteria(StudentEntity.class);
            //3. Criteria.add 增加约束。
            criteria.add(Restrictions.like("name","%"+studentname+"%"));
            //4.调用list()方法返回查询结果的集合
            List<StudentEntity> studentinfolist=criteria.list();
            //开启一个新的事务Transaction
            session1.beginTransaction();
            //提交事务,此处才是真正与数据库交互的语句
            session1.getTransaction().commit();
            HibernateTools.closeSession();
            return studentinfolist;
        }
    
    
    }

    (3)输出json结果

    import EntityClass.StudentEntity;
    import com.alibaba.fastjson.JSON;
    import java.util.List;
    
    public class Test01 {
        public static void main(String[] args) {
            //调用hibernate,根据用户输入查询数据
            List<StudentEntity> studentEntityList= HibernateTest01.queryStudentByUserInput("","","");
            System.out.println(JSON.toJSONString(studentEntityList));
    
        }
    }

    输出结果为:

    [{"id":1,"name":"linda","age":12,"address":"天台","score":"80"},{"id":2,"name":"lucky","age":26,"address":"杭州","score":"95"},{"id":3,"name":"bob","age":34,"address":"金华","score":"75"},{"id":4,"name":"Alice","age":27,"address":"湖州","score":"88"}]

    原数据库中的数据为:

     6.复杂json格式字符串到JavaBean_obj的转换

    Teacher teacher = JSONObject.parseObject(COMPLEX_JSON_STR,Teacher.class);

    注意:Teacher为javabean实体类。

    参考文献:https://blog.csdn.net/a1032818891/article/details/81334874

  • 相关阅读:
    JVM致命错误日志(hs_err_pid.log)解读
    ant+proguard签名打包 .jar
    ProGuard之——代码混淆
    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
    利用Ant与Proguard混淆
    Ant在Java项目中的使用(一眼就看会)
    Native2Ascii文件转换 -- 待完善
    scp 的时候提示WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    logback与log4j比较
    腾讯、百度、阿里面试经验—(3)阿里面经
  • 原文地址:https://www.cnblogs.com/luckyplj/p/10711195.html
Copyright © 2020-2023  润新知