public static User fromJson(String json, final User old) { try { JSONObject object = new JSONObject(json); long id = object.getLong("id"); if (id == old.getId()) { Gson gson = new GsonBuilder().registerTypeAdapter(User.class, new InstanceCreator<User>() { @Override public User createInstance(Type type) { return old; } }).create(); return gson.fromJson(json, User.class); } } catch (JSONException e) { e.printStackTrace(); } return new Gson().fromJson(json, User.class); }
public static List<User> fromJson(String json, final List<User> old) { try { List<User> result = new ArrayList<>(); JSONArray array = new JSONArray(json); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); final long id = object.getLong("id"); Gson gson = new GsonBuilder().registerTypeAdapter(User.class, new InstanceCreator<User>() { @Override public User createInstance(Type type) { return getUserById(old, id); } }).create(); result.add(gson.fromJson(object.toString(), User.class)); } return result; } catch (JSONException e) { e.printStackTrace(); } return new Gson().fromJson(json, new TypeToken<List<User>>() { }.getType()); }
private static User getUserById(List<User> users, long id) { for (User user : users) { if (user.getId() == id) { return user; } } return new User(); } }