我正在Swift 4.2中编写一个iOS应用程序。
服务器抛出响应:
[
"A40F8EBE-7E34-126B-FFA4-ADC7A4D58300",
"https://backendlessappcontent.com/AABE5C4B-AA58-955C-FF16-27B64A185300/737368FE-4963-275B-FF3E-D909B3CCC500/files/qr_codes/9a53c126-1a67-4a71-8072-83c056db4338.png"
]
我需要解析它并采用它的两个值:id和url。
怎么做到这一点?
假设服务器以Data
对象的形式为您提供响应,您可以使用[String]
解码JSONDecoder
:
let decoder = JSONDecoder()
if let stringArray = try? decoder.decode([String].self, from: data) {
let id = stringArray[0]
let url = stringArray[1]
}
如果您将响应改为String
,则可以先将此字符串转换为Data
:
let data = someString.data(using: .utf8)!
让我们假设你有像这样的Data
格式的json:
let data = Data("""
[
"A40F8EBE-7E34-126B-FFA4-ADC7A4D58300",
"https://backendlessappcontent.com/AABE5C4B-AA58-955C-FF16-27B64A185300/737368FE-4963-275B-FF3E-D909B3CCC500/files/qr_codes/9a53c126-1a67-4a71-8072-83c056db4338.png"
]
""".utf8)
您需要将json解码为String
数组,然后您需要第一个元素作为id,第二个元素作为url。为此,你可以创建符合struct
的Decodable
和来自init
的自定义Decoder
struct Response: Decodable {
let id, url: String
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let array = try container.decode([String].self)
id = array[0]
url = array[1]
}
}
然后你可以使用Data
简单地用JSONDecoder
格式解码你的json
do {
let response = try JSONDecoder().decode(Response.self, from: data)
print(response) // Response(id: "A40F8EBE-7E34-126B-FFA4-ADC7A4D58300", url: "https://backendlessappcontent.com/AABE5C4B-AA58-955C-FF16-27B64A185300/737368FE-4963-275B-FF3E-D909B3CCC500/files/qr_codes/9a53c126-1a67-4a71-8072-83c056db4338.png")
} catch {
print(error)
}