Java下常用JSON的使用以及性能比较

简介: 最近在研究Java下各种JSON的使用情况

前言


最近在研究Java下各种JSON的使用情况


待处理的实体类

package com.jsonTest;
/**
 * @author xiang.wei
 * @create 2018/5/14 13:22
 */
public class Person {
    private String code;
    private int age;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "code='" + code + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.jsonTest;
import java.util.List;
public class UserCenterSynModel implements java.io.Serializable{
  private static final long serialVersionUID = 5910206870550619784L;
  private String CUid;//主键id
  private String COldUserName;//老的用户名或者是税号
  private String CUsername;//用户名
  private String ctexnum; //税号
    private String CEmail;//邮箱--已验证的邮箱
  private String CAccountBlank;
  private String CAddress;
  private List<Person> personList; //关联用户
  public String getCUid() {
  return CUid;
  }
  public void setCUid(String CUid) {
  this.CUid = CUid;
  }
  public String getCOldUserName() {
  return COldUserName;
  }
  public void setCOldUserName(String COldUserName) {
  this.COldUserName = COldUserName;
  }
  public String getCUsername() {
  return CUsername;
  }
  public void setCUsername(String CUsername) {
  this.CUsername = CUsername;
  }
  public String getCtexnum() {
  return ctexnum;
  }
  public void setCtexnum(String ctexnum) {
  this.ctexnum = ctexnum;
  }
  public String getCEmail() {
  return CEmail;
  }
  public void setCEmail(String CEmail) {
  this.CEmail = CEmail;
  }
  public String getCAccountBlank() {
  return CAccountBlank;
  }
  public void setCAccountBlank(String CAccountBlank) {
  this.CAccountBlank = CAccountBlank;
  }
  public String getCAddress() {
  return CAddress;
  }
  public void setCAddress(String CAddress) {
  this.CAddress = CAddress;
  }
  public List<Person> getPersonList() {
  return personList;
  }
  public void setPersonList(List<Person> personList) {
  this.personList = personList;
  }
  @Override
  public String toString() {
  return "UserCenterSynModel{" +
    "CUid='" + CUid + '\'' +
    ", COldUserName='" + COldUserName + '\'' +
    ", CUsername='" + CUsername + '\'' +
    ", ctexnum='" + ctexnum + '\'' +
    ", CEmail='" + CEmail + '\'' +
    ", CAccountBlank='" + CAccountBlank + '\'' +
    ", CAddress='" + CAddress + '\'' +
    ", personList=" + personList +
    '}';
  }
}


fastJSON

作为阿里的一块JSON序列化和反序列化的工具,fastJSON还是很好用的


添加依赖

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.8</version>
 </dependency>


测试代码

public class FastJSONTest {
    public static void main(String[] args) {
        UserCenterSynModel userCenterSynModel = new UserCenterSynModel();
        userCenterSynModel.setCAccountBlank("测试银行");
        userCenterSynModel.setCAddress("测试地址");
        userCenterSynModel.setCEmail("邮箱");
        userCenterSynModel.setCUid("11111");
        userCenterSynModel.setCtexnum("22222");
          List<Person> peopleList = new ArrayList<>();
        Person person1 = new Person();
        person1.setCode("测试用户1");
        person1.setAge(12);
        peopleList.add(person1);
        Person person2 = new Person();
        person2.setCode("测试用户2");
        person2.setAge(23);
        peopleList.add(person2);
        userCenterSynModel.setPersonList(peopleList);
        String json = JSON.toJSONString(userCenterSynModel);
        System.out.println("fastJSON序列化结果:"+json);
        System.out.println("fastJSON反序列化结果 :"+JSON.parseObject(json,UserCenterSynModel.class));
    }
}


测试结果:

fastJSON序列化结果:{"cAccountBlank":"测试银行","cAddress":"测试地址","cEmail":"邮箱","cUid":"11111","ctexnum":"22222","personList":[{"age":12,"code":"测试用户1"},{"age":23,"code":"测试用户2"}]}
fastJSON反序列化结果 :UserCenterSynModel{CUid='11111', COldUserName='null', CUsername='null', ctexnum='22222', CEmail='邮箱', CAccountBlank='测试银行', CAddress='测试地址', personList=[Person{code='测试用户1', age=12}, Person{code='测试用户2', age=23}]}


Gson

添加依赖

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3.1</version>
        </dependency>


测试代码

public class GsonTest {
    public static void main(String[] args) {
        UserCenterSynModel userCenterSynModel = new UserCenterSynModel();
        userCenterSynModel.setCAccountBlank("测试银行");
        userCenterSynModel.setCAddress("测试地址");
        userCenterSynModel.setCEmail("邮箱");
        userCenterSynModel.setCUid("11111");
        userCenterSynModel.setCtexnum("22222");
          List<Person> peopleList = new ArrayList<>();
        Person person1 = new Person();
        person1.setCode("测试用户1");
        person1.setAge(12);
        peopleList.add(person1);
        Person person2 = new Person();
        person2.setCode("测试用户2");
        person2.setAge(23);
        peopleList.add(person2);
        userCenterSynModel.setPersonList(peopleList);
        //序列化
        Gson gson = new Gson();
        String jsonStr=gson.toJson(userCenterSynModel);
        System.out.println(jsonStr);
        //反序列化
        UserCenterSynModel userCenterSynModel1 = gson.fromJson(jsonStr, UserCenterSynModel.class);
        System.out.println(userCenterSynModel1);
    }
}


测试结果

Gson序列化结果:{"CUid":"11111","ctexnum":"22222","CEmail":"邮箱","CAccountBlank":"测试银行","CAddress":"测试地址","personList":[{"code":"测试用户1","age":12},{"code":"测试用户2","age":23}]}
Gson反序列化结果:UserCenterSynModel{CUid='11111', COldUserName='null', CUsername='null', ctexnum='22222', CEmail='邮箱', CAccountBlank='测试银行', CAddress='测试地址', personList=[Person{code='测试用户1', age=12}, Person{code='测试用户2', age=23}]}


Jackson

添加依赖

<!--jackson的使用-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.0</version>
        </dependency>


测试代码

public class JacksonTest {
    public static void main(String[] args) throws IOException {
        UserCenterSynModel userCenterSynModel = new UserCenterSynModel();
        userCenterSynModel.setCAccountBlank("测试银行");
        userCenterSynModel.setCAddress("测试地址");
        userCenterSynModel.setCEmail("邮箱");
        userCenterSynModel.setCUid("11111");
        userCenterSynModel.setCtexnum("22222");
        List<Person> peopleList = new ArrayList<>();
        Person person1 = new Person();
        person1.setCode("测试用户1");
        person1.setAge(12);
        peopleList.add(person1);
        Person person2 = new Person();
        person2.setCode("测试用户2");
        person2.setAge(23);
        peopleList.add(person2);
        userCenterSynModel.setPersonList(peopleList);
        //序列化
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(userCenterSynModel);
        System.out.println(json);
        //反序列化
        ObjectMapper mapper = new ObjectMapper();
        UserCenterSynModel user = mapper.readValue(json, UserCenterSynModel.class);
        System.out.println(user);
    }
}


测试结果

Jackson 序列化结果:{"ctexnum":"22222","personList":[{"code":"测试用户1","age":12},{"code":"测试用户2","age":23}],"caddress":"测试地址","cemail":"邮箱","coldUserName":null,"cusername":null,"cuid":"11111","caccountBlank":"测试银行"}
Jackson反序列化结果:UserCenterSynModel{CUid='11111', COldUserName='null', CUsername='null', ctexnum='22222', CEmail='邮箱', CAccountBlank='测试银行', CAddress='测试地址', personList=[Person{code='测试用户1', age=12}, Person{code='测试用户2', age=23}]}


json-lib

添加依赖

 

<!--json-lib的使用-->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>


测试代码

public class NetJSONTest {
    public static void main(String[] args) {
        UserCenterSynModel userCenterSynModel = new UserCenterSynModel();
        userCenterSynModel.setCAccountBlank("测试银行");
        userCenterSynModel.setCAddress("测试地址");
        userCenterSynModel.setCEmail("邮箱");
        userCenterSynModel.setCUid("11111");
        userCenterSynModel.setCtexnum("22222");
     List<Person> peopleList = new ArrayList<>();
        Person person1 = new Person();
        person1.setCode("测试用户1");
        person1.setAge(12);
        peopleList.add(person1);
        Person person2 = new Person();
        person2.setCode("测试用户2");
        person2.setAge(23);
        peopleList.add(person2);
        userCenterSynModel.setPersonList(peopleList);
        JSONObject jsonObject = JSONObject.fromObject(userCenterSynModel);
        System.out.println("json-lib序列化结果:" + jsonObject.toString());
        UserCenterSynModel userCenterSynModel1 = (UserCenterSynModel) JSONObject.toBean(jsonObject, UserCenterSynModel.class);
        System.out.println("json-lib反序列化结果:"+userCenterSynModel1);
    }
}


测试结果

json-lib序列化结果:{"CAccountBlank":"测试银行","CAddress":"测试地址","CEmail":"邮箱","COldUserName":"","CUid":"11111","CUsername":"","ctexnum":"22222","personList":[{"age":12,"code":"测试用户1"},{"age":23,"code":"测试用户2"}]}
json-lib反序列化结果:UserCenterSynModel{CUid='11111', COldUserName='', CUsername='', ctexnum='22222', CEmail='邮箱', CAccountBlank='测试银行', CAddress='测试地址', personList=[net.sf.ezmorph.bean.MorphDynaBean@490d6c15[
  {code=测试用户1, age=12}
], net.sf.ezmorph.bean.MorphDynaBean@7d4793a8[
  {code=测试用户2, age=23}
]]}


性能比较

请参考:https://blog.csdn.net/vickyway/article/details/48157819


相关文章
|
7月前
|
存储 缓存 Java
Java 12相比Java 11有哪些性能上的提升?
Java 12相比Java 11有哪些性能上的提升?
216 3
|
7月前
|
Java 测试技术 API
Java Stream API:被低估的性能陷阱与优化技巧
Java Stream API:被低估的性能陷阱与优化技巧
512 114
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
347 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
342 1
|
7月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
510 8
|
8月前
|
Java Spring
如何优化Java异步任务的性能?
本文介绍了Java中四种异步任务实现方式:基础Thread、线程池、CompletableFuture及虚拟线程。涵盖多场景代码示例,展示从简单异步到复杂流程编排的演进,适用于不同版本与业务需求,助你掌握高效并发编程实践。(239字)
392 6
|
8月前
|
缓存 Java 开发者
Java 开发者必看!ArrayList 和 LinkedList 的性能厮杀:选错一次,代码慢成蜗牛
本文深入解析了 Java 中 ArrayList 和 LinkedList 的性能差异,揭示了它们在不同操作下的表现。通过对比随机访问、插入、删除等操作的效率,指出 ArrayList 在多数场景下更高效,而 LinkedList 仅在特定情况下表现优异。文章强调选择合适容器对程序性能的重要性,并提供了实用的选择法则。
370 3
|
9月前
|
机器学习/深度学习 Java 编译器
解锁硬件潜能:Java向量化计算,性能飙升W倍!
编译优化中的机器相关优化主要包括指令选择、寄存器分配、窥孔优化等,发生在编译后端,需考虑目标平台的指令集、寄存器、SIMD支持等硬件特性。向量化计算利用SIMD技术,实现数据级并行,大幅提升性能,尤其适用于图像处理、机器学习等领域。Java通过自动向量化和显式向量API(JDK 22标准)支持该技术。
369 4
|
9月前
|
Cloud Native 前端开发 Java
WebAssembly 与 Java 结合的跨语言协作方案及性能提升策略研究
本文深入探讨了WebAssembly与Java的结合方式,介绍了编译Java为Wasm模块、在Java中运行Wasm、云原生集成等技术方案,并通过金融分析系统的应用实例展示了其高性能、低延迟、跨平台等优势。结合TeaVM、JWebAssembly、GraalVM、Wasmer Java等工具,帮助开发者提升应用性能与开发效率,适用于Web前端、服务器端及边缘计算等场景。
321 0
|
11月前
|
存储 Java 大数据
Java代码优化:for、foreach、stream使用法则与性能比较
总结起来,for、foreach和stream各自都有其适用性和优势,在面对不同的情况时,有意识的选择更合适的工具,能帮助我们更好的解决问题。记住,没有哪个方法在所有情况下都是最优的,关键在于理解它们各自的特性和适用场景。
890 23