四种JSON解析工具--(json-lib&Jackson&Gson&FastJson)

主要分为以下四类:

一、json-lib

json-lib是较早出现且应用最广泛的json解析工具,但是较多的依赖第三方jar包。

使用json-lib需引入以下jar包:

  • commons-beanutils-1.8.3.jar
  • commons-collections-3.2.1.jar
  • commons-lang-2.6.jar
  • commons-logging-1.1.1.jar
  • ezmorph-1.0.6.jar
  • json-lib-2.4-jdk15.jar

且较复杂的类型转换json-lib会产生缺陷,出现问题。因此json-lib如今一般无法满足互联网化的需求。

使用实例:

jar包及项目结构如下:
四种JSON解析工具--(json-lib&Jackson&Gson&FastJson)_第1张图片
实体类Product.java

package cn.cf.domain;

/**
 * 商品实体类
 * 
 * @author Administrator
 *
 */
public class Product {
	private String name;
	private Double price;
	private String category;
	private Double weight;

	public Product() {
		super();
	}

	public Product(String name, Double price, String category, Double weight) {
		super();
		this.name = name;
		this.price = price;
		this.category = category;
		this.weight = weight;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Double getPrice() {
		return price;
	}

	public void setPrice(Double price) {
		this.price = price;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public Double getWeight() {
		return weight;
	}

	public void setWeight(Double weight) {
		this.weight = weight;
	}

	@Override
	public String toString() {
		return "Product [name=" + name + ", price=" + price + ", category=" + category + ", weight=" + weight + "]";
	}
}

测试代码TestDemo.java

  • JavaBean/ list/ map转json

代码如下:

    //创建product对象
    		Product product1 = new Product("火龙果",20d,"水果",2d);
    		Product product2 = new Product("东北散装珍珠米",10d,"粮食",3d);
    		Product product3 = new Product("排骨",24d,"肉类",0.5d);
    		//创建产品list集合
    		List list =new ArrayList();
    		list.add(product1);
    		list.add(product2);
    		list.add(product3);
    		//创建产品map集合
    		Map map = new HashMap();
    		map.put(product1.getName(), product1);
    		map.put(product2.getName(), product2);
    		map.put(product3.getName(), product3);
    		
        //将product转换为json
		JSONArray jsonBean = JSONArray.fromObject(product1);
		System.out.println("输出product的json数据");
		System.out.println(jsonBean);
		//将list集合转换为json
		JSONArray jsonArray = JSONArray.fromObject(list);
		System.out.println("输出list的json数据");
		System.out.println(jsonArray);
		//将map集合转为json
		JSONArray jsonMap = JSONArray.fromObject(map);
		System.out.println("输出map的json数据");
		System.out.println(jsonMap);

结果如下:
在这里插入图片描述

  • 使用JsonCofig进行筛选要显示的数据

      /*
       * 设置筛选条件
       */
      JsonConfig jsonConfig = new JsonConfig();
      jsonConfig.setExcludes(new String[] {"weight", "category"});
      
      //单个bean不显示重量,分类
      System.out.println("输出product筛选的json数据");
      JSONArray jsonBean1 = JSONArray.fromObject(product1, jsonConfig);
      System.out.println(jsonBean1);
      
      //list不显示重量分类
      System.out.println("输出list筛选的json数据");
      JSONArray jsonArray1 = JSONArray.fromObject(list, jsonConfig);
      System.out.println(jsonArray1);
      
      //map不显示重量分类
      JSONArray jsonMap1 = JSONArray.fromObject(map, jsonConfig);
      System.out.println("输出mapt筛选的json数据");
      System.out.println(jsonMap1);
    

结果如下:
在这里插入图片描述

  • jsonObject转为JavaBean

      //jsonObject转换为JavaBean
      String str = "{'name':'鸡蛋','price':8,'weight':1.3,'category':'禽蛋'}";
      Product product4 = (Product) JSONObject.toBean(JSONObject.fromObject(str), Product.class);
      System.out.println(product4);
    

结果如下:
在这里插入图片描述

二、Jackson

jackson相比于json-lib框架,所需要的依赖jar包要少一点,性能较高且简单易用。

需引入jar包:

  • jackson-core.jar
  • jackson-mapper.jar

实例如下:

  • 项目结构及jar包
    四种JSON解析工具--(json-lib&Jackson&Gson&FastJson)_第2张图片
  • 实体类同前
  • 测试类

转json

//创建product对象
Product product1 = new Product("火龙果",20d,"水果",2d);
Product product2 = new Product("东北散装珍珠米",10d,"粮食",3d);
Product product3 = new Product("排骨",24d,"肉类",0.5d);
//创建产品list集合
List list =new ArrayList();
list.add(product1);
list.add(product2);
list.add(product3);
//创建产品map集合
Map map = new HashMap();
map.put(product1.getName(), product1);
map.put(product2.getName(), product2);
map.put(product3.getName(), product3);

//ObjectMapper为Jackson的核心,所有json操作都是用ObjectMapper实现
ObjectMapper mapper = new ObjectMapper();

//Product转化为json
String productJson = mapper.writeValueAsString(product1);
System.out.println("Product转化为json");
System.out.println(productJson);
//list转化为json
String listJson = mapper.writeValueAsString(list);
System.out.println("list转化为json");
System.out.println(listJson);
//map转化为json
String mapJson = mapper.writeValueAsString(map);
System.out.println("map转化为json");
System.out.println(mapJson);

结果如下:
在这里插入图片描述
转化为JavaBean

String str = "{\"name\":\"鸡蛋\",\"price\":8,\"weight\":1.3,\"category\":\"禽蛋\"}";
Product product4 = mapper.readValue(str, Product.class);
System.out.println(product4);

字符串需使用双引号,使用单引号报错

结果如下:

在这里插入图片描述

三、Gson

Gson是Google研发的,目前功能最全的Json解析器。主要应用toJson和fromJson两个转换函数,无需额外的依赖,使用较方便

使用jar包:

  • gson-2.8.0.jar

实例如下(实体类同上例):

转化为json

// 创建product对象
	Product product1 = new Product("火龙果", 20d, "水果", 2d);
	Product product2 = new Product("东北散装珍珠米", 10d, "粮食", 3d);
	Product product3 = new Product("排骨", 24d, "肉类", 0.5d);
	// 创建产品list集合
	List list = new ArrayList();
	list.add(product1);
	list.add(product2);
	list.add(product3);
	// 创建产品map集合
	Map map = new HashMap();
	map.put(product1.getName(), product1);
	map.put(product2.getName(), product2);
	map.put(product3.getName(), product3);

// 创建Gson对象
Gson gson = new Gson();

//将product转换为json
System.out.println("输出product的json数据");
String jsonProduct = gson.toJson(product1);
System.out.println(jsonProduct);
//将list集合转换为json
System.out.println("输出list的json数据");
String jsonArray = gson.toJson(list);
System.out.println(jsonArray);
//将map集合转为json
String jsonMap = gson.toJson(map);
System.out.println("输出map的json数据");
System.out.println(jsonMap);

结果如下:
四种JSON解析工具--(json-lib&Jackson&Gson&FastJson)_第3张图片
json转换为实体

String str = "{'name':'鸡蛋','price':8,'weight':1.3,'category':'禽蛋'}";
Product product4 = gson.fromJson(str, Product.class);
System.out.println(product4);

结果如下:
在这里插入图片描述

四、FastJson

FastJson是阿里巴巴的开源框架,速度很快,且无其他依赖

导入jar包:

  • fastjson-1.2.58.jar

实例如下:

转为json

	String jsonProduct = JSON.toJSONString(product1);
	System.out.println(jsonProduct);
	
	String jsonArray = JSON.toJSONString(list);
	System.out.println(jsonArray);
	
	String jsonMap = JSON.toJSONString(map);
	System.out.println(jsonMap);

结果如下:
在这里插入图片描述
json转为实体:

	String str = "{'name':'鸡蛋','price':8,'weight':1.3,'category':'禽蛋'}";
	Product product4 = JSON.parseObject(str, Product.class);
	System.out.println(product4);

结果如下:
在这里插入图片描述

以上是JSON的四种解析工具的基础用法。详细的后部再单个补充。

你可能感兴趣的:(JavaWeb)