比较JAVA语言中Gson与FastJson两种JSON解析

一、Google的Gson

  • 概述

Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。

  • 将对象转换为JSON字符串

步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json = new Gson().toJSON(要转换的对象);

案例:

import com.google.gson.Gson;

public class Demo01 {
    public static void main(String[] args) {
       /* //1.创建Gson对象
        Gson g = new Gson();
        //2.转换
        Book b = new Book("100","java教程","学好java的几个步骤");
        String s = g.toJson(b);
        System.out.println(s);*/


        //1.    创建Gson对象
        //2.    转换
        Book b = new Book("100","java教程","学好java的几个步骤");
        System.out.println(new Gson().toJson(b));

    }
}
  • 将JSON字符串转换为对象

步骤:

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
    对象 = new Gson().fromJson(JSON字符串,对象类型.class);

案例一:

import com.google.gson.Gson;

public class Demo02 {
    public static void main(String[] args) {
        //创建Gson对象
        Gson g = new Gson();
        //2.转换 {"id":"100","name":"java教程","info":"学好java的几个步骤"}
        Book b = g.fromJson("{\"id\":\"100\",\"name\":\"java教程\",\"info\":\"学好java的几个步骤\"}",Book.class);
        System.out.println(b);
    }
}

案例二:

import com.google.gson.Gson;

import java.util.HashMap;
import java.util.List;

public class Demo03 {
    public static void main(String[] args) {
        //1.创建Gson对象
        Gson g = new Gson();
        //2.转换  {"id":"100","name":"金苹果","info":"种植苹果真辛苦","page":["锄禾日当午","汗滴禾下土","嘿嘿嘿嘿嘿"]}
        HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"嘿嘿嘿嘿嘿\"]}", HashMap.class);
        List page = (List) data.get("page");
        System.out.println(page.get(1));
    }
}

小贴士:需要根据JSON的结构转换成对应的数据结构对象

二、阿里的FastJson

  • 概述

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。

  • 将对象转换为JSON字符串

步骤:

  1. 引入JAR包
  2. 在需要转换JSON字符串的位置编写如下代码即可:
    String json=JSON.toJSONString(要转换的对象);

示例:

import com.alibaba.fastjson.JSON;

public class Demo04 {
    public static void main(String[] args) {
        Book book = new Book("1002","饮酒","结庐在人境,而无车马喧;问君何能尔?心远地自偏。采菊东篱下,悠然见南山;此中有真意,欲辨已忘言。");
        String json = JSON.toJSONString(book);
        System.out.println(json);
    }
}
  • 将JSON字符串转换为对象

步骤:

  1. 引入JAR包
  2. 在需要转换Java对象的位置, 编写如下代码:
    类型 对象名=JSON.parseObject(JSON字符串, 类型.class);

    List<类型> list=JSON.parseArray(JSON字符串,类型.class);

示例一:转成Book对象

import com.alibaba.fastjson.JSON;

public class Demo05 {
    public static void main(String[] args) {
        Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"结庐在人境,而无车马喧;问君何能尔?心远地自偏。采菊东篱下,悠然见南山;此中有真意,欲辨已忘言。\",\"name\":\"饮酒\"}",Book.class);
        System.out.println(book);
    }
}

示例二:转成字符串数组

import com.alibaba.fastjson.JSON;

import java.util.List;

public class Demo06 {
    public static void main(String[] args) {
        List<String> strings = JSON.parseArray(" [\"一二三\",\"二三四\",\"三四五\",\"123\"]", String.class);
        System.out.println(strings.get(1));
    }
}

三、比较Gson与FastJson优劣

  • 使用范围

     —— Gson在世界范围内使用比较广泛
     ——在国内使用FastJson的比较多
    
  • 书写格式

     —— Gson需先创建好对象的类型以及其成员,更符合JAVA面向对象的特征
    —— FastJson无需创建对象
    
  • 性能比较

测试Gson的toJson()方法和FastJson的toJSONString()方法,代码如下:

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;

public class CompareGsonAndFastjson {
    public static void main(String[] args) {
        Gson gson = new Gson();
        //创建一个Book对象
        Book b = new Book("100","java教程","学好java的几个步骤");

        //测试Gson的toJson()方法运行用时
        long currTime = System.currentTimeMillis();
        for(int i = 0; i < 1000; i++) {
            gson.toJson(b);
        }
        System.out.println("gson:"+(System.currentTimeMillis() - currTime));

        //测试fastJson的toJSONString()方法运行用时
       /* long currTime = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            JSON.toJSONString(b);
        }
        System.out.println("fastjson:"+(System.currentTimeMillis() - currTime));*/
    }
}

运行结果:

项目GsonFastJson
1000gson:56
gson:58
gson:52
fastjson:126
fastjson:151
fastjson:127
10,000gson:130
gson:121
gson:98
fastjson:180
fastjson:174
fastjson:194
1,000,000gson:1372
gson:1347
gson:1258
fastjson:570
fastjson:552
fastjson:552

对比结果得出结论:在执行小于1万次的条件下,Gson的性能更优;在执行100万次的时候,FastJson性能更优。(系统配置如下图)
在这里插入图片描述

小贴士:linux等其他系统以及不同的硬件配置下有待测试

三、如何选择

两者各有优劣,使用上具体还是需要根据团队的习惯选择;如果自己可以做选择,博主比较推荐Gson

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值