[英]Compare JSON response to a String
所以我的 iOS 應用程序將數據 (json) 發送到服務器,如果一切順利,服務器會發回一個 json 響應{"status":"ok"}
。 我在想我不需要真正解析這個響應,因為它只是一個確認,所以我可以將我得到的響應與靜態NSString
進行比較,后者將是"status":"ok"
。
事實上,我想要的 String 有一個引號,這讓我很難將我的響應數據與這個 String 進行比較。
我確信有一種方法可以做我想做的事情。
可能不是你想要的答案。 在某些時候,您會想要執行以下操作之一:
發生這種情況時,您應用程序的所有舊版本都會阻止您執行此操作。 取而代之的是,今天正確地進行解析,以在未來為自己買單。 NSJSONSerialization 易於使用,並且可以快速解析處理上述每種情況的結果。
您是否只是在問如何在 Objective-C 字符串中包含文字引號?
if ([returnedText isEqualToString:@"{\"status\":\"ok\"}"]) {
// success!
} else {
// failure :-(
}
當然,你應該非常確定你只會得到這個確切的字符串......特別是,你能確保你返回的 JSON 不會包含任何你不期望的空格嗎?
正如@DrC 在他/她的回答中提到的,比較兩個 JSON 字符串時正確的做法是將 JSON 字符串解析為具有JSONSerialization類的 Foundation 對象,然后比較生成的 Foundation 對象。 這種方法可以解決兩個 JSON 字符串格式稍有不同或字段順序不同的問題。 因此,例如,重要的是將"{\\"a\\":1,\\"b\\":2}"
和"{\\"b\\":2,\\"a\\":1}"
視為是相等的,因為它們在邏輯上是相等的。
這是我放在一起的一個 Swift 函數,它有助於進行這種比較:
class JSONAssert {
class func assertEquals(expected: String, actual: String) {
let expectedData = Data(expected.utf8)
let actualData = Data(actual.utf8)
let expectedObject: Any
let actualObject: Any
do {
expectedObject = try JSONSerialization.jsonObject(with: expectedData, options: [])
} catch {
XCTFail("Failed constructing a Foundation object from `expected` (i.e. \(expected)): \(error)")
return
}
do {
actualObject = try JSONSerialization.jsonObject(with: actualData, options: [])
} catch {
XCTFail("Failed constructing a Foundation object from `actual` (i.e. \(actual)): \(error)")
return
}
guard let expectedDictionary = expectedObject as? NSDictionary else {
XCTFail("Failed casting expected object (i.e. \(expectedObject)) to an NSDictionary")
return
}
guard let actualDictionary = actualObject as? NSDictionary else {
XCTFail("Failed casting actual object (i.e. \(actualObject)) to an NSDictionary")
return
}
XCTAssertEqual(expectedDictionary, actualDictionary)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.