在一次需求中要将两层泛型嵌套的json字符串进行处理,转换总是出问题,特此记录。
泛型嵌套关系:List<DataHistory<Account>>,使用的是 fastjson
数据结构:
public class DataHistory<T> implements Serializable {
public static final long serialVersionUID = 1L;
private String txId;
private T value;
private Date timeStamp;
private boolean isDelete;
}
public class Account implements Serializable{
public static final long serialVersionUID = 1L;
//账户id
private String accountId;
//平台账户id
private String platformId;
//资产值
private double score;
private Trans trans;
public class Trans implements Serializable{
private static final long serialVersionUID = 1L;
private String transAccount;
private double amount;
private String transType;
private String txId;
private String transPlatform;
}
}
json 数据:
[{
"timeStamp": 1525990156000,
"txId": "d91499d6fea0de8f87ef30e985e82411a938d636f00554111b6eb7b9ee778c0b",
"delete": false,
"value": {
"accountId": "wnzx0000001",
"score": 0,
"platformId": "wnzx0000001",
"trans": {
"transAccount": "wnzx0000001",
"amount": 0,
"transType": "init",
"txId": "d91499d6fea0de8f87ef30e985e82411a938d636f00554111b6eb7b9ee778c0b",
"transPlatform": "wnzx0000001"
}
}
},
{
"timeStamp": 1526067619000,
"txId": "525f1bec080f323a88c76634f8ea2a779f4ec46e44cba73bc4decf21fffff431",
"delete": false,
"value": {
"accountId": "wnzx0000001",
"score": 80,
"platformId": "wnzx0000001",
"trans": {
"transAccount": "89bd9d9e-b4c4-4da8-b3b6-91cf14099b71",
"amount": 80,
"transType": "read",
"txId": "",
"transPlatform": ""
}
}
}]
转换代码:
List<DataHistory> datas = JSON.parseArray(result, DataHistory.class);
for (DataHistory his : datas) {
JSONObject obj = (JSONObject)his.getValue();
Account account = JSON.parseObject(obj.toJSONString(), Account.class);
if (transType.equals(account.getTrans().getTransType())){
//res.add(his);
}
}