@VictorZeng 我也有经常有这样的需求,根据不同的场景,排除或者包括返回对象的字段,比如下面的示例代码:
private static JSONArray removeUselessUserInfo(JSONArray originJsonArr){
JSONArray destJsonArr = new JSONArray();
if (originJsonArr != null && !originJsonArr.isEmpty()){
for (int i = 0; i < originJsonArr.size(); i++) {
JSONObject userJson = originJsonArr.getJSONObject(i);
userJson.remove("phone");
userJson.remove("about");
userJson.remove("lastlogin");
userJson.remove("lastLoginType");
userJson.remove("lastLoginType");
userJson.remove("email");
userJson.remove("firstlogin");
userJson.remove("coverUrl");
userJson.remove("createdTime");
userJson.remove("state");
userJson.remove("equipmentType");
userJson.remove("recommendTime");
userJson.remove("contestCount");
destJsonArr.add(userJson);
}
}
return destJsonArr;
}
其实我只是想要JSONObject中的两个字段,比如 userName,nickeName,我不得不采用类似的方法把JSONObject不需要的key全部remove掉,或者采用如下的方式:
public static JSONArray removeUselessTribeContestInfo(JSONArray userArr) {
if (userArr != null && !userArr.isEmpty()){
JSONArray destJsonArr = new JSONArray();
for (int i = 0; i < userArr.size(); i++) {
User User = JSON.toJavaObject(userArr.getJSONObject(i),User.class);
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(User.class,"userName","nickeName");
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(User,filter));
destJsonArr.add(jsonObject);
}
return destJsonArr;
}
return userArr;
}
我觉得如果能够在JSONObject中扩展一个removeExcept(String... properties),这样是最好的。
这样当需要转换的pojo中的字段很多的时候,而我需要保留很多字段的时候,我只需要用remove(String),如果我需要保留很少的字段的时候,我只需要removeExcept(String... properties)即可,这样上述的代码就更为简洁:
public static JSONArray removeUselessTribeContestInfo(JSONArray userArr) {
if (userArr != null && !userArr.isEmpty()){
JSONArray destJsonArr = new JSONArray();
for (int i = 0; i < contestArr.size(); i++) {
JSONObject userJson = originJsonArr.getJSONObject(i);
userJson.removeExcept("userName","nickName");
destJsonArr.add(jsonObject);
}
return destJsonArr;
}
return userArr;
}