Estaba buscando una manera de comparar dos JSONObjects además de usar
JSONObject.toString().equals(JSONObject.toString())
y me encontré con este método similar, pero es muy vago acerca de lo que compara.
"Determine si dos JSONObjects son similares. Deben contener el mismo conjunto de nombres que deben estar asociados con valores similares ". Enlace
¿Qué se supone que significa eso? ¿Qué tan similar? ¿Exactamente lo mismo?
Busqué muy duro y no pude encontrar nada que pudiera aclararlo.
Aquí está la fuente de JSONObject.similar() :
/** * Determine if two JSONObjects are similar. * They must contain the same set of names which must be associated with * similar values. * * @param other The other JSONObject * @return true if they are equal */ public boolean similar(Object other) { try { if (!(other instanceof JSONObject)) { return false; } if (!this.keySet().equals(((JSONObject)other).keySet())) { return false; } for (final Entry<String,?> entry : this.entrySet()) { String name = entry.getKey(); Object valueThis = entry.getValue(); Object valueOther = ((JSONObject)other).get(name); if(valueThis == valueOther) { continue; } if(valueThis == null) { return false; } if (valueThis instanceof JSONObject) { if (!((JSONObject)valueThis).similar(valueOther)) { return false; } } else if (valueThis instanceof JSONArray) { if (!((JSONArray)valueThis).similar(valueOther)) { return false; } } else if (valueThis instanceof Number && valueOther instanceof Number) { if (!isNumberSimilar((Number)valueThis, (Number)valueOther)) { return false; }; } else if (!valueThis.equals(valueOther)) { return false; } } return true; } catch (Throwable exception) { return false; } } Esencialmente similar() compara recursivamente los nombres y valores de los JSONObject y devuelve verdadero si son iguales. Primero, verifica si los keySet son iguales, luego pasa a los valores. Comprueba recursivamente cada valor en el keySet para ver si son iguales en cada JSONObject . Si no, devuelve falso.
La descripción que encontró se relaciona con el método JSONObject.similar(), que compara si dos objetos JSON son iguales, pero quizás tengan un orden diferente de sus atributos.
El equals() comparará cada carácter de cadena, uno por uno, comprobando si es el mismo, teniendo el mismo orden.