主要分为以下四类:
一、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包及项目结构如下:

实体类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<Product> list =new ArrayList<Product>();
list.add(product1);
list.add(product2);
list.add(product3);
//创建产品map集合
Map<String, Product> map = new HashMap<String, Product>();
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
//创建product对象
Product product1 = new Product("火龙果",20d,"水果",2d);
Product product2 = new Product("东北散装珍珠米",10d,"粮食",3d);
Product product3 = new Product("排骨",24d,"肉类",0.5d);
//创建产品list集合
List<Product> list =new ArrayList<Product>();
list.add(product1);
list.add(product2);
list.add(product3);
//创建产品map集合
Map<String, Product> map = new HashMap<String, Product>();
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<Product> list = new ArrayList<Product>();
list.add(product1);
list.add(product2);
list.add(product3);
// 创建产品map集合
Map<String, Product> map = new HashMap<String, Product>();
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转换为实体
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的四种解析工具的基础用法。详细的后部再单个补充。
1165



被折叠的 条评论
为什么被折叠?



