栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Gson与Fastjson两种Json解析神器保姆级使用攻略

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Gson与Fastjson两种Json解析神器保姆级使用攻略

Gson与Fastjson两种Json解析神器保姆级使用攻略 一、为什么使用Gson与Fastjson?

Ajax异步访问数据需要前端(js)和服务器端(java)进行传输数据,但是Ajax只能识别字符串,但是服务器里面的是一个java对象,需要将java对象转换为字符串(使用json ),Gson与Fastjson就是将java对象转换json串的主流工具类!

二、服务器端java对象转化json串 1、Ajax异步传递数据为什么使用json?
1. 本质就是一个字符串
2. java和js都支持json形式字符串

所以我们需要将java对象转换为json串,在前端将json串转化为js对象
2、常用的json形式数据转换工具(服务器端java转json)
  Gson(google的),**Fastjson(阿里的)转换工具** ,我们目前主要使用**Fastjson** 
3、Google的Gson

Gson是目前功能最全的Json解析神器,Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器 。Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。

4、阿里巴巴的Fastjson (主流 )

Fastjson是一个Java语言编写 的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致 ,超过所有json库。

三、阿里巴巴的Fastjson 的使用(主流 ) 1、在maven项目中导入Fastjson 的依赖

(注:maven选择依赖小攻略:搜索maven,选择使用人数最高的一般都是用于企业开发使用的)


    com.alibaba
    fastjson
    1.2.47

2、创建实体类User
public class User {
    private Integer id;
    private String name;
    private String password;
    private Date birthday;
3、使用FastJson工具类转换对象 (1)单个java对象转换为JSON串
 
    @Test
    public void FastJson() {
        //1.创建一个对象
        User user = new User(1, "王恒杰", "123456", new Date());
        // 打印对象
        System.out.println("User对象"+user);
        
        String json = JSONObject.toJSONString(user);
        System.out.println("json串"+json);
    }
  • 转换后结果

注:我们会发现对象转换为JSON串时,日期转化不会正常显示 ,他会显示为毫秒!FastJson专门提供一个API解决日期格式转化 问题!

(2)java对象转换为JSON串日期转化方案
  
    @Test
    public void FastJson() {
        //1.创建一个对象
        User user = new User(1, "王恒杰", "123456", new Date());
        // 打印对象
        System.out.println("User对象"+user);
        
        String json1 = JSONObject.toJSONString(user);
        System.out.println("json串"+json1);

        
        String json2 = JSONObject.toJSONStringWithDateFormat(user, "yyyy-mm-dd hh:mm:ss");
        System.out.println("日期格式化后的json串"+json2);

    }
  • 转换后结果

(3)List集合对象转换为JSON串
  @Test
    public void ListByFastJsonTest(){
        //1.创建List集合
        ArrayList list = new ArrayList<>();
        //2,添加数据
        list.add(new User(1, "王恒杰1", "123456", new Date()));
        list.add(new User(2, "王恒杰2", "123456", new Date()));
        list.add(new User(3, "王恒杰3", "123456", new Date()));
        list.add(new User(4, "王恒杰4", "123456", new Date()));
        //通过fastJson将List集合转换为json串
        String listUser = JSONObject.toJSONStringWithDateFormat(list, "yyyy-mm-dd");
        System.out.println(listUser);
    }
  • 转换后结果

(4)map集合对象转换为JSON串
  @Test
    public void MapByFastJsonTest() {
        //1.创建map集合
        Map map = new HashMap<>();
        //2,添加数据
        map.put("1号选手", "王恒杰1");
        map.put("2号选手", "王恒杰2");
        map.put("3号选手", "王恒杰3");
        map.put("4号选手", "王恒杰4");
        //通过fastJson将map集合转换为json串
        String json = JSONObject.toJSONString(map);
        System.out.println(json);
    }
  • 转换后结果
(5)使用注解的方法解决日期格式
  • 实体类User:

  • 测试方法:
 @Test
    public void DateByFastJsonTest(){
        User user = new User();
        user.setBirthday(new Date());
        String json = JSONObject.toJSONString(user);
        System.out.println(json);

    }
  • 转换后结果

四、Google的Gson 的使用(功能最全 )

先对与fastJson来说:Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。因为我很少使用,所以Gson我就测试了一个!

1、在maven项目中导入Fastjson 的依赖

    com.google.code.gson
    gson
    2.8.5


2、创建实体类User
public class User {
    private Integer id;
    private String name;
    private String password;
    private Date birthday;
3、单个java对象转换为JSON串:toJson
    
    @Test
    public void Gson() {
        //1.创建一个对象
        User user = new User(1, "王恒杰", "123456", new Date());
        // 打印对象
        System.out.println("User对象" + user);
        
        Gson gson = new Gson();
        String json = gson.toJson(user);
        System.out.println(json);
    }

  • 转换后结果

4、java对象转换为JSON串日期转化方案
 @Test
    public void DateGson() {
        //1.创建一个对象
        User user = new User(1, "王恒杰", "123456", new Date());
        // 打印对象
        System.out.println("User对象" + user);
        
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.setDateFormat("yyyy-mm-dd").create();
        String json = gson.toJson(user);
        System.out.println(json);
    }
  • 转换后结果

五、如何选择Gson || FastJson

在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,
如果只是功能 要求,没有性能 要求,可以使用google的Gson,
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean

六、前端将json串转换为js中的json对象
//json形式字符串:xhr.responseText
1. 转换方式1: var JsJsonObject=JSON.parse(xhr.responseText);
2. 转换方式2:  var JsJsonObject=eval("+(xhr.responseText)+");
JSJsonObject属性名 获取对应属性值
  • 前后端json转化总结:
1. java对象:使用json转换工具(FastJson) 将对象转换为json串 再进行转换
2. js: 将接收到的json字符串转换为js中的json对象
七、FastJson实用案例 1、案例要求:单击展示单个用户信息 & 验证用户名是否存在

2、具体实现 (1)技术选型:
    Servlet+html+Ajax+js(主要展示ajax&FastJson效果),Ajax我们使用的是原生js实现
(2)所需要依赖
    
      
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    
    
    
    
      javax.servlet.jsp
      jsp-api
      2.1
    
    
    
    
      com.alibaba
      fastjson
      1.2.47
    

(3)实体类User
public class User {
    private Integer id;
    private String name;
    private String password;
    private Date birthday;
(3)html


用户名:
(4)ajax实现数据传输
   
(5)servlet实现后端
  • 单击展示单个用户信息
  @WebServlet("/checkName")
public class CheckServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //统一编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;setchar=utf-8");
        response.setCharacterEncoding("utf-8");
        //接收数据
        String name = request.getParameter("name");
        User user = new User(1, "王恒杰", "123456", new Date());
        //处理业务
        if (user.getName().equals(name)) {
            response.getWriter().print("用户可以被查询到!");
        } else {
            //验证用户名是否存在
            response.getWriter().print("用户不存在");
        }
    }
}
  • 验证用户名是否存在
@WebServlet("/user")
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //统一编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;setchar=utf-8");
        response.setCharacterEncoding("utf-8");
        //接收数据
        String name = request.getParameter("name");
        User user = new User(1, "王恒杰", "123456", new Date());
        //处理业务
            // 响应输出流 向客户端响应内容
            String jsonUser = JSONObject.toJSonStringWithDateFormat(user, "yyyy-mm-dd");
            response.getWriter().print(jsonUser);
    }
}


效果展示:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号