1. ホーム

[解決済み】Javaで2つのJSONオブジェクトが子順序を無視して等しいかテストする【非公開

2022-04-04 17:21:24

質問

私は、特にWebサービスから戻ってくるJSONをユニットテストするために、子順序を無視して2つのJSONオブジェクトを比較することをサポートするJSONパージングライブラリを探しています。

主要なJSONライブラリの中で、これをサポートしているものはありますか?org.jsonライブラリは、単に参照比較を行うだけです。

どのように解決するのですか?

一般的なアーキテクチャのポイントとして、私は通常、特定のシリアライズ形式への依存が、ストレージ/ネットワーク層を超えて広がっていくことを避けるよう助言します。したがって、まず最初に、JSON形式ではなく、独自のアプリケーション オブジェクト間の同等性をテストすることを検討するようお勧めします。

とはいえ、現在私は ジャクソン をざっと読んでみたところ、彼らの ObjectNode.equals() の実装は、あなたが望むセットメンバーシップの比較を行うことを示唆しています。

public boolean equals(Object o)
{
    if (o == this) return true;
    if (o == null) return false;
    if (o.getClass() != getClass()) {
        return false;
    }
    ObjectNode other = (ObjectNode) o;
    if (other.size() != size()) {
        return false;
    }
    if (_children != null) {
        for (Map.Entry<String, JsonNode> en : _children.entrySet()) {
            String key = en.getKey();
            JsonNode value = en.getValue();

            JsonNode otherValue = other.get(key);

            if (otherValue == null || !otherValue.equals(value)) {
                return false;
            }
        }
    }
    return true;
}