主要介紹Gson,jackJson,fastJson等用法
1、gson
jar:
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
有對象
private Object msg;
private List<Product> result;
private Object total;
private Object success;
其中result是List<Product> 類型,當json中result爲空的時候,轉換失敗
public class RestResponse {
private Object msg;
private Object result;
private Object total;
private Object success;
}
public class Product {
private String id;
private String product;
private String unit;
private String attr;
private String status;
private Date updateTime;
}
將所有屬性定義成Object類型,如果json中還有json數組,則改字段會轉爲LinkedTreeMap數據類型。如果通過其他條件(success,total)判斷出result有轉換意義,然後再將result進行gson轉換。
代碼:
/** 可能 json對象 有的key的value爲空
* list對象設置Object 類型,經過gson轉換之後java類型爲 LinkedTreeMap,成功之後再通過gson 轉成list對象
* @throws Exception
*/
@Test
public void json2() throws Exception{
String json = "{\"msg\":\"true\",\"result\":[{\"attr\":\"0.0\",\"id\":\"100.0\",\"product\":\"0\",\"status\":\"297.086\",\"updateTime\":\"20170103\"},{\"attr\":\"0.0\",\"id\":\"100.0\",\"product\":\"0\",\"status\":\"162.678\"}],\"total\":60,\"success\":true}";
RestResponse2 obj = new GsonBuilder().create().fromJson(json, RestResponse2.class);
if("true".equals(obj.getSuccess().toString()) && (double)obj.getTotal()>0){
List<Product> list = new GsonBuilder().setDateFormat("yyyyMMdd").create().fromJson(obj.getResult().toString(), new TypeToken<List<Product>>(){}.getType());
System.out.println(list);
if(list!=null && list.size()>0){
System.out.println(list.get(0).getUpdateTime());
System.out.println(list.get(0).getAttr());
}
}
System.out.println(obj);
//對象轉json
String obj2Json = new GsonBuilder().setDateFormat("yyyy-MM-dd").create().toJson(obj);
System.out.println(json);
System.out.println(obj2Json);
}
2、fastJson
jar:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.42</version>
</dependency>
@Test
public void json2Obj() throws Exception{
//json2obj
String json = "{\"attr\":\"2\",\"updateTime\":\"2017-03-08 12:01:03\",\"id\":\"1\",\"product\":\"1\",\"status\":\"1\",\"unit\":\"2\"}";
String jsonArray = "[{\"attr\":\"2\",\"updateTime\":\"20170308120103\",\"id\":\"1\",\"product\":\"1\",\"status\":\"1\",\"unit\":\"2\"},{\"attr\":\"2\",\"id\":\"2\",\"product\":\"1\",\"status\":\"1\",\"unit\":\"2\"}]";
System.out.println(json);
// JSON.DEFFAULT_DATE_FORMAT = "yyyyMMddhh:MM:dd";
Product product = JSON.parseObject(json,Product.class);
List<Product> parseObject = JSON.parseArray(jsonArray,Product.class);
//obj2json
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
System.out.println(JSON.toJSONString(parseObject, SerializerFeature.WriteDateUseDateFormat));
System.out.println(0);
// result:
// {"attr":"2","updateTime":"2017-03-08 12:01:03","id":"1","product":"1","status":"1","unit":"2"}
// [{"attr":"2","id":"1","product":"1","status":"1","unit":"2","updateTime":"2017-03-08"},{"attr":"2","id":"2","product":"1","status":"1","unit":"2"}]
}
3、jackJson
jar:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
@Test
public void json2List() throws Exception{
//json2Obj
String json = "[{\"attr\":\"2\",\"updateTime\":\"2017-03-08 12:01:03\",\"id\":\"1\",\"product\":\"1\",\"status\":\"1\",\"unit\":\"2\"},{\"attr\":\"2\",\"id\":\"2\",\"product\":\"1\",\"status\":\"1\",\"unit\":\"2\"}]";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
jackjsonMapper.setDateFormat(df);
JavaType javaType = jackjsonMapper.getTypeFactory().constructParametricType(List.class, Product.class);
List<Product> readValue = jackjsonMapper.readValue(json, javaType);
System.out.println(json);
//obj2Json
System.out.println(jackjsonMapper.writeValueAsString(readValue));
//"updateTime":1488945381232
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
jackjsonMapper.setDateFormat(df2);
System.out.println(jackjsonMapper.writeValueAsString(readValue));
//"updateTime":"2017-03-08"
System.out.println(0);
// result:
// [{"attr":"2","updateTime":"2017-03-08 12:01:03","id":"1","product":"1","status":"1","unit":"2"},{"attr":"2","id":"2","product":"1","status":"1","unit":"2"}]
// [{"id":"1","product":"1","unit":"2","attr":"2","status":"1","updateTime":"2017-03-08 12:01:03"},{"id":"2","product":"1","unit":"2","attr":"2","status":"1","updateTime":null}]
// [{"id":"1","product":"1","unit":"2","attr":"2","status":"1","updateTime":"2017-03-08"},{"id":"2","product":"1","unit":"2","attr":"2","status":"1","updateTime":null}]
}