關於資料序列化(3),JSON的方式,FastJson序列化物件和List集合示例
JSON也是物件序列化的一種方式
1. 示例
public class FriendLikeVO {
public String sn;
public int score;
public long time;
public FriendLikeVO(JSONObject jo) {
this.sn = jo.getString("sn");
this.score = jo.getIntValue("score");
this.time = jo.getLong("time");
}
public FriendLikeVO() {
}
public FriendLikeVO(String sn, int score, long time) {
this.sn = sn;
this.score = score;
this.time = time;
}
/**
* 把Json轉換為List
*/
public static List<FriendLikeVO> jsonToList(String json) {
List<FriendLikeVO> result = new ArrayList<FriendLikeVO>();
JSONArray ja = JSON.parseArray(json);
if (ja == null) {
return result;
}
for (int i = 0; i < ja.size(); i++) {
FriendLikeVO vo = new FriendLikeVO(ja.getJSONObject(i));
result.add(vo);
}
return result;
}
/**
* 將List轉換為Json
*/
public static String listToJson(List<FriendLikeVO> likeList) {
JSONArray ja = new JSONArray();
likeList.stream().forEach(vo -> {
JSONObject jo = new JSONObject();
jo.put("sn", vo.sn);
jo.put("score", vo.score);
jo.put("time", vo.time);
ja.add(jo);
});
return ja.toJSONString();
}
}
2. 不想序列化的地方用ransient標註
但是用fastjson的序列化更簡單一些,如果不想序列化的欄位就標註transient就可以了
public class FriendLike {
public String sn; // 好友ID,目前為IP
public int score; // 點讚的點數
public long time;
public transient int cc;
public FriendLike() {
}
public FriendLike(String sn, int score, long time) {
this.sn = sn;
this.score = score;
this.time = time;
}
/**
* 把Json轉換為List
*/
@SuppressWarnings("unchecked")
public static List<FriendLike> jsonToList(String json) {
if(Util.isEmpty(json)){
return new ArrayList<FriendLike>();
}
return JSON.parseObject(json, List.class);
}
/**
* 將List轉換為Json
*/
public static String listToJson(List<FriendLike> likeList) {
if(null == likeList){
return null;
}
return JSON.toJSONString(likeList);
}
}
3.迴圈引用 不建議使用fastjson有bug
fastjson的迴圈引用問題,反序列化也是可以成功的
測試程式碼
FriendLike fk = new FriendLike("a", 2, System.currentTimeMillis());
FriendLike fk2 = new FriendLike("b", 2, System.currentTimeMillis());
List<FriendLike> list = new ArrayList<>();
list.add(fk);
list.add(fk2);
list.add(fk2);
String a = JSON.toJSONString(list);
List<FriendLike> list2 = JSON.parseObject(a, List.class);
System.out.println(a);
System.out.println(list);
輸出結果
[{"score":2,"sn":"a","time":1470211141179},{"score":2,"sn":"b","time":1470211141179},{"$ref":"$[1]"}][FriendLike[sn=a,score=2,time=1470211141179], FriendLike[sn=b,score=2,time=1470211141179], FriendLike[sn=b,score=2,time=1470211141179]]
4. 序列化List
注意一個坑,如果要序列化List的時候應該使用JSON.parseArray這個方法,並且注意,被序列化的物件型別要有無參構造方法!
@SuppressWarnings("unchecked")
public static List<FriendHelpVO> jsonToList(String json) {
if (Util.isEmpty(json)) {
return new ArrayList<FriendHelpVO>();
}
return JSON.parseArray(json, FriendHelpVO.class);
}
5. 反序列化
tips:
FastJson反序列化的原理是 如果
JSON.parseObject(json, obj.class);
如果要反序列的話的物件中有集合屬性或者要反序列化一個集合,fastJson的反序列化,只能根據傳入的class來生成一個集合,但是集合的元素為JSONObject。
如果是物件中的某個屬性的宣告不是具體的類。也會造成這種情況。
如果想完全的用fastjson序列化反序列化一個物件。
那麼生成json字串的時候需要
這樣
JSON.toJSONString(v2,SerializerFeature.WriteClassName);
相關推薦
關於資料序列化(3),JSON的方式,FastJson序列化物件和List集合示例
JSON也是物件序列化的一種方式 1. 示例 public class FriendLikeVO { public String sn; public int score; public long time; p
實現java多執行緒的3種方式,99%人沒用過第3種
實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利
Dart Socket 程式設計,通過使用JSON方式,解決業務粘包的問題的最佳實踐
一、背景 Socket程式設計程式設計主用於資料交換,而粘包的問題,其實本身不是問題,TCP已經對於傳輸的封包進行了很好的處理,業務粘包,只是業務處理上的問題,網路上很多處理方法,最常見的有以下幾種: 定義業務傳輸頭,在頭裡面描述了開始識別符號,再加資料長度,如0xAA
多執行緒(3)-多執行緒訪問共享物件和資料的方式
在多執行緒(2)-ThreadLocal,我們討論了執行緒範圍內的資料共享,本篇文章我們討論執行緒之間即多執行緒訪問共享物件和資料的方式 一:Java5之前給共享資料加上鎖synchronized,上程式碼 public class MultiThreadShareDat
深度學習-----資料預處理是必要的,一些經驗化的預處理措施
資料歸一化 更多詳細資訊,參照網址:非常值得一看: http://blog.csdn.net/qq_26898461/article/details/50463052 http://blog.csdn.net/bea_tree/article/details/5
js 實現純前端將資料匯出excel兩種方式,親測有效
由於專案需要,需要在不呼叫後臺介面的情況下,將json資料匯出到excel表格,參考了好多資料以及很多大佬寫的部落格終於實現,相容chrome沒問題,其他還沒有測試過,這邊介紹兩種實現方式,並附上程式碼和gif動圖,博主不才還望輕噴方法一將table標籤,包括tr、td等對j
在vue中使用axios實現跨域請求並且設定返回的資料的格式是json格式,而不是jsonp格式
在vue中使用axios實現跨域請求需求分析:在專案中需要抓取qq音樂的歌曲列表的資料,由於要請求資料的地址url=https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg。從qq音樂的官網上可以看到該請求的請求
ECharts3 實現資料動態更新3+時間座標,資料累積
程式碼修改自ECharts3文件非同步資料載入和更新中的資料的動態更新部分,原示例固定顯示若干資料,簡單進行了修改,資料累積加上時間座標。 是否累積資料的關鍵在於shift(),去掉shift()之後即累積資料。 其實ECharts3之後更新資料挺簡單的,越
頁面載入初始化3種方式及區別
1 $(function () { });//jquery2 $(document).ready(function () { });//jquery3 window.onload = function
Mockplus3.3上新,免費體驗團隊管理和所有專業功能!
Mockplus 原型設計 產品經理 Mockplus是更快更簡單的原型設計工具,在3.31版本中推出了團隊版和企業版。 Mockplus團隊版和企業版專為原型項目設計協作打造,可以更好地實現團隊管理和協作設計。
針對Centos7在使用最小化安裝的時候,無法table補全和ifconfig命令無法使用問題
針對Centos7在使用最小化安裝的時候,無法tab補全和ifconfig命令無法使用的問題 tab建補全的包:bash-completion-2.1-6.el7.noarch [[email protected] ~]# yum -y install
python 自己實現列表的sort函式,支援逆序,可以排序任意型別的資料。 實現列表的排序,要求支援逆序和指定標準(key)
def paixv(lt,reverse = None): for i in range(len(lt) - 1): for j in range(i+1,len(lt)): if reverse : if
嵌入式Linux併發程式設計,程序間通訊方式,System V IPC物件,ftok(),共享記憶體使用步驟,建立shmget(),對映shmat(),撤銷對映shmdt(),控制shmctl(),注意
文章目錄 1,System V IPC 2,使用IPC物件的大致流程 3,生成KEY值ftok() ftok示例 4,共享記憶體 4.1,共享記憶體使用步驟 4.2,共享記憶體建立 shmget()
前端用json形式,實現了面向物件的程式設計,將json轉為CSV用於前端生成報表
前端程式碼的呼叫如下,封裝部分是怎麼寫的呢? JSonToCSV.setDataConver({ data: jsonData, fileName: '銷售資料',
通過橋接的方式,連線虛擬機器(centos7)和宿主機(ubuntu)
1.基本環境 宿主機:ubuntu 14.0.4 虛擬機器:centos 7 虛擬機器管理軟體:virt-manager 2.背景知識 * 宿主機與虛擬機器網路連線的三種方式:NAT,橋接,host-only。其中host-only不能使虛擬機器上網,這裡不討論。然後就是N
有一個包包的數量為100個。分別從實體店和官網進行售賣! * 要求使用多執行緒的方式,分別列印實體店和官網賣出包包的資訊! *分別統計官網和實體店各賣出了多少個包包
Packages類: public class Packages implements Runnable { private int packages = 100; Object object = new Object(); static int
Json轉java對象和List集合
ase array ret 添加 java對象 return 單個 get sonar public static void main(String[] args) { // 轉換對象 String strJson ="{\"basemenu_
實際開發中,解決列印iReport中獲取list集合遍歷,並且縮小間距
用iReport做列印的時候,在後端程式碼中得到map集合後,map中存放list 用$F獲取屬性,欄屬性代表每行的空、間隔 /*** * * @author xxx * @param checkVisaReqVo *
JSON字串和list集合互轉
谷歌的Gson.jar: //list轉換為json Gson gson = new Gson(); List<Person&g
用Gson實現json與物件、list集合之間的相互轉化
先寫一個Person實體類,匯入Gson包 String jsonData="{\"userid\":\"1881140130\"}";//第一種寫法 //1.把json轉化為一