棄掉fastjson,改回jackson

記得年前升級過一次fastjson,版本1.2.60,安全要求用到fastjson的全部升級,結果一掃一大片,用的人還真不少。許多使用springboot整體打包的同事,都是升級fastjson後重新打包,上傳,重新發布應用。

小編所在部門相關springboot項目都進行了jar包分離(參見:如何分離構建業務jar,配置文件,第三方依賴jar),升級只是替換了一個fastjson的jar包,然後重啓應用。可是這沒過多久,安全再次要求升級fastjson了,這次改換使用jackson了,使用起來同樣簡單明瞭,性能差異也並不明顯。

下面記錄幾個小編在項目中常用的場景:

1.對象轉json字符串

javaObjectMapper mapper = new ObjectMapper();
String jsonPerson = mapper.writeValueAsString(new Person("碼農小麥",25));
System.out.println(jsonPerson);
#結果:{"name":"碼農小麥","age":25,"birthday":"2000-06-01 00:00:00"}

2.json字符串轉對象

Person person = mapper.readValue(jsonPerson,Person.class);
System.out.println(person);
#結果:Person{name='碼農小麥',age=25,birthday=Thur June 01 00:00:00 CST 2000}

3.直接構建json字符串

JsonNodeFactory jsonNodeFactory = JsonNodeFactory.instance;
ObjectNode objectNode = jsonNodeFactory.objectNode();
objectNode.put("name","碼農小麥");
objectNode.put("age",25);
System.out.println(objectNode.toString());

4.直接解析json字符串

JsonNode jsonNode = mapper.readTree(objectNode.toString());
System.out.println(String.format("name: %s, age: %d",
        jsonNode.get("name").asText(),jsonNode.get("age").asInt(0)));

5.使用json數組

ObjectNode resultNode = jsonNodeFactory.objectNode();
resultNode.put("code",200);
ArrayNode arrayNode = resultNode.putArray("data");
ObjectNode dataNode = jsonNodeFactory.objectNode();
dataNode.put("name","碼農小麥1");
dataNode.put("age",25);
arrayNode.insert(1,dataNode);
ObjectNode dataNode1 = jsonNodeFactory.objectNode();
dataNode1.put("name","碼農小麥2");
dataNode1.put("age",25);
arrayNode.insert(2,dataNode1);
System.out.println(resultNode.toString());
#結果:{"code":200,"data":[{"name":"碼農小麥1","age":25},
             {"name":"碼農小麥2","age":25}]}

6.日期轉換

默認轉換爲json字符串會將對象日期轉換爲Long型的毫秒數,可以使用註解進行格式化。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

接口間傳輸日期,最好還是使用Long型毫秒數,前後端轉換都很方便。

7.註解
jackson提供許多註解方便用戶定製json轉換,如@JsonIgnore轉換時忽略此註解標註的屬性,@JsonProperty轉換時指定屬性名稱等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章