首页 > 解决方案 > JSON返回单个字符串时如何使用Swift的JSONSerialization

问题描述

所以这可能是一个非常基本的问题,但我很好奇你将如何使用 Swift 中的 JSONSerialization 处理解析作为单个字符串返回的 JSON 对象。所以我正在玩一个免费的哈利波特 API,并注意到其中一个路由返回一个字符串(https://www.potterapi.com/v1/sortinghat),它给出的响应只是一个字符串哈利波特中的四所房子。

"Ravenclaw"

下面是我的尝试。

do {
    let json = try JSONSerialization.jsonObject(with: data, options: []) as? String
    print("json: \(json)")
} catch {
    print("Error: \(error.localizedDescription)")
}

我认为简单地进行类型转换String就足够了,但我只是收到以下错误:“错误:无法读取数据,因为它的格式不正确。

我知道有更好的方法来解析 JSON,例如使用 Codable,但我只是想了解它是如何工作的,然后再继续解决这个问题。

标签: jsonswiftnsjsonserialization

解决方案


JSONSerialization 是错误的工具。您想使用 JSONDecoder,它在 Swift 中更有用:

let json = Data("""
"Ravenclaw"
""".utf8)

let result = try JSONDecoder().decode(String.self, from: json)

请注意,这需要 iOS 13.1 或 macOS 10.15.1。否则,您将需要使用@vadian 的答案。


推荐阅读