2017-03-06 12 views
2

私はJSONObject.similar(JSONObject)これは実際には何を比較していますか?

JSONObject.toString()。equalsを使ってほかに2 JSONObjectsを比較する方法を探していた(JSONObject.toStringを())

、これと同様の方法に出くわしたが、それはそれは比較するものについて本当に漠然とです。

"2つのJSONObjectが似ているかどうかを判断します。と同様の値に関連付ける必要がある同じ名前のセットを含む必要があります。 Link

これはどういう意味ですか?どのように似ている?まったく同じ?

私は本当に難しいものを探し出し、それをクリアできるものは何も見つかりませんでした。ここで

+0

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

答えて

1

JSONObject.similar()ためsourceです:基本的に

/** 
* 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()メソッドに関連しています。このメソッドは、2つのJSONオブジェクトが同じかどうかを比較しますが、おそらく属性の順序が異なります。

equals()は、同じ文字列のcaracterを1つずつ比較し、同じであれば同じ順序で比較します。

関連する問題