[SWIFT] Comparaison JSON

Parfois, vous écrivez du code de test tel que Codable pour la couche Model et souhaitez comparer les chaînes JSON attendues. Cependant, les formats de format KeyValue tels que JSON ne sont pas dans un ordre particulier et ne peuvent pas être simplement comparés.

Ensuite, j'ai trouvé une méthode pour créer un type de dictionnaire et comparer.

extension String {
    func jsonDictionary() throws -> [String: AnyHashable]? {
        guard let data = self.data(using: .utf8) else { return nil }
        return try data.jsonDictionary()
    }
}

extension Data {
    func jsonDictionary() throws -> [String: AnyHashable]? {
        return try JSONSerialization.jsonObject(with: self, options: []) as? [String: AnyHashable]
    }
}

Si vous préparez une fonction qui renvoie le résultat de JSONSerialization.jsonObject en tant qu'extension de données et que vous ajoutez une fonction qui la transmet via l'extension String, par exemple, le code de test suivant peut être évalué avec XCTAssertEqual.

    func test_HogeEncode() {
        let object = Hoge(value: 123, flag: true)
        let expectation = """
            {
                "value": "123",
                "flag": "true"
            }
        """
        let data = try? JSONEncoder().encode(object)
        XCTAssertNotNil(data)
        
        XCTAssertEqual(try? expectation.jsonDictionary(), try? data!.jsonDictionary())
    }

Recommended Posts

Comparaison JSON
Comparaison des chaînes MyBatis
[Java] Comparaison de cartes
Différé avec JSON
Comparaison du framework Java