docs: 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.equals(valueOther)) {
                      return false;
                  }
              }
              return true;
          } catch (Throwable exception) {
              return false;
          }
      }