我一直在寻找一种方式两个一个JSONObjects比较除了使用JSONObject.similar(JSONObject)这与真正的比较是什么?
JSONObject.toString()。等于(JSONObject.toString())
和整个这个类似的方法来但它确实含糊什么比较。 “
”确定两个JSONObjects是否相似,它们必须包含必须与类似值相关联的相同名称集。“ Link
这是什么意思?有多相似?一模一样?
我真的很努力地搜索,找不到任何可以清除它的东西。
我一直在寻找一种方式两个一个JSONObjects比较除了使用JSONObject.similar(JSONObject)这与真正的比较是什么?
JSONObject.toString()。等于(JSONObject.toString())
和整个这个类似的方法来但它确实含糊什么比较。 “
”确定两个JSONObjects是否相似,它们必须包含必须与类似值相关联的相同名称集。“ Link
这是什么意思?有多相似?一模一样?
我真的很努力地搜索,找不到任何可以清除它的东西。
这里的source为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;
}
Set<String> set = this.keySet();
if (!set.equals(((JSONObject)other).keySet())) {
return false;
}
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
Object valueThis = this.get(name);
Object valueOther = ((JSONObject)other).get(name);
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.equals(valueOther)) {
return false;
}
}
return true;
} catch (Throwable exception) {
return false;
}
}
本质similar()
递归比较名称和一个JSONObjects的值,如果它们是相同的,则返回true。 首先,它检查键集是否相等,然后移动到值。 然后递归检查键集中的每个值,看它们在每个JSONObject中是否相等。如果不是,则返回false。
您发现的描述与方法JSONObject.similar()相关,该方法比较两个JSON对象是否相同,但可能具有不同的属性顺序。
equals()会比较每个字符串caracter,逐个检查它是否相同,具有相同的顺序。
http://stackoverflow.com/a/2255893/1814524 – hya