FastJson是一個Java編寫的高性能JSON處理庫,它被廣泛應用于許多領域,尤其是分布式領域。
然而,在使用FastJson時,有時候會遇到轉換List為JSON時失敗的情況。具體表現(xiàn)為:
com.alibaba.fastjson.JSONException: write json error: toJSONString error, class com.xxx.XXX, fastjson version 1.2.28 at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:546) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:235)
造成這種情況的原因是,F(xiàn)astJson的序列化過程中,對每個值都進行了類型判斷。而當序列化List時,F(xiàn)astJson不僅要遍歷列表中的每個元素,而且還需要判斷每個元素的類型。如果列表中的元素類型不一致,F(xiàn)astJson就無法處理。
解決這種問題的方法是,指定List元素的類型。可以使用FastJson提供的TypeReference類,將List轉換為指定類型的List,然后再轉換為JSON字符串。具體代碼如下:
List<XXX> list = new ArrayList<>(); //添加元素 Type type = new TypeReference<List<XXX>>() {}.getType(); String jsonString = JSON.toJSONString(list, type);
通過指定List元素的類型,F(xiàn)astJson就能夠正確地序列化List到JSON字符串中。而如果列表中的元素類型不一致,也可以使用Object類型,但需要注意Object類型無法正常反序列化。