[SWIFT] JSON-Vergleich

Manchmal schreiben Sie Testcode wie Codable für die Modellebene und möchten die erwarteten JSON-Zeichenfolgen vergleichen. KeyValue-Formatformate wie JSON sind jedoch in keiner bestimmten Reihenfolge und können nicht einfach verglichen werden.

Dann habe ich mir eine Methode ausgedacht, um einen Wörterbuchtyp zu erstellen und zu vergleichen.

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]
    }
}

Wenn Sie eine Funktion vorbereiten, die das Ergebnis von "JSONSerialization.jsonObject" als Datenerweiterung zurückgibt, und eine Funktion hinzufügen, die die String-Erweiterung durchläuft, können Sie sie beispielsweise mit XCTAssertEqual auch mit dem folgenden Testcode auswerten.

    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

JSON-Vergleich
MyBatis-Zeichenfolgenvergleich
[Java] Kartenvergleich
Anders als bei JSON
Java Framework Vergleich