1 @JsonProperty("jsonName") 2 private String name;
2 private String name;
FastJson主要用到了如下三個類:
JSON:FastJson的解析器,用於JSON格式字符串、JSON對象及javaBean之間的轉換;html
Json對象JSONObject;java
Json數組對象JSONArray。json
JSONObject和JSONArray繼承了JSON,能夠直接用於轉換。首先,JSONObject本質上能夠看做一個Map<String,Object>數組
1 public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
而後,JSONArray本質上能夠看做是一個List<Object>dom
1 public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {
FastJson的一些使用以下所示:網站
Json串轉換成JSONObjectthis
1 {"header":{"code":0,"message":"SUCCESS"},"data":{"id":48,"metric.name":"test_hk_1","metric.type":"kafka_commit","partition.lag":false,"group.id":""}}
1 import com.alibaba.fastjson.JSONObject; 2 JSONObject jsonObject = JSONObject.parseObject(contentAsString).getJSONObject("data");
1 String str = JSONObject.toJSONString(jsonObject);
原始字符串spa
1 private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
轉換過程code
1 import com.alibaba.fastjson.JSONArray; 2 JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR); 3 4 for (Object obj : jsonArray) { 5 JSONObject jsonObject = (JSONObject) obj; 6 } 7 }
原始字符串同上例,JavaBean以下所示htm
1 public class Student { 2 3 private String studentName; 4 private Integer studentAge; 5 6 public String getStudentName() { 7 return studentName; 8 } 9 10 public void setStudentName(String studentName) { 11 this.studentName = studentName; 12 } 13 14 public Integer getStudentAge() { 15 return studentAge; 16 } 17 18 public void setStudentAge(Integer studentAge) { 19 this.studentAge = studentAge; 20 } 21 }
轉換過程
1 Student student = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});
或者
1 Student student = JSONObject.parseObject(JSON_OBJ_STR, Student.class);
1 String res = JSON.toJSONString(student);
⚠️注意⚠️:若是這裏student對象沒有getter方法,沒法轉換成Json字符串的。另外,在轉換Json字符串的過程當中,能夠對特殊字段進行設置,好比將對象中屬性的null值輸出:
1 String str = JSONObject.toJSONString(student, SerializerFeature.WriteMapNullValue);
QuoteFieldNames | 輸出key時是否使用雙引號,默認爲true |
WriteMapNullValue | 輸出值爲null的字段,是否默認爲false |
WriteNullNumberAsZero | 數值字段若是爲null,輸出爲0,而非null |
WriteNullListAsEmpty | List字段若是爲null,輸出爲[],而非null |
WriteNullStringAsEmpty | 字符類型字段若是爲null,輸出爲"",而非null |
WriteNullBooleanAsFalse | Boolean字段若是爲null,輸出爲false,而非null |
1 JSONObject jsonObject = (JSONObject)JSON.toJSON(student);
淺拷貝
1 JSONObject b = new JSONObject(a);
深拷貝
1 JSONObject b = (JSONObject)a.clone();
上邊的深拷貝很差使的話,能夠考慮下邊這個
1 private Object deepCopyByJson(Object obj) { 2 String json = JSON.toJSONString(obj); 3 return JSON.parseObject(json, Object.class); 4 }
1 "{\"header\":{\"code\":34,\"message\":\"job id doesn't exist.\"},\"data\":null}"
boolean,int等類型的value以下所示:
1 "{\"header\":{\"code\":0,\"message\":\"SUCCESS\"},\"data\":{\"id\":48,\"metric.type\":\"kafka_commit\",\"consumer.zk.host\":\"\",\"consumer.zk.port\":2181,\"consumer.zk.root\":\"/brokers\",\"enabled\":true,\"group.id\":\"\"}}"