2017-03-06 19 views
2

我一直在寻找一种方式两个一个JSONObjects比较除了使用JSONObject.similar(JSONObject)这与真正的比较是什么?

JSONObject.toString()。等于(JSONObject.toString())

和整个这个类似的方法来但它确实含糊什么比较。 “

”确定两个JSONObjects是否相似,它们必须包含必须与类似值相关联的相同名称集。“ Link

这是什么意思?有多相似?一模一样?

我真的很努力地搜索,找不到任何可以清除它的东西。

+0

http://stackoverflow.com/a/2255893/1814524 – hya

回答

1

这里的sourceJSONObject.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。

1

您发现的描述与方法JSONObject.similar()相关,该方法比较两个JSON对象是否相同,但可能具有不同的属性顺序。

equals()会比较每个字符串caracter,逐个检查它是否相同,具有相同的顺序。