将字符串解析为字符串数组[关闭]

问题描述 投票:-12回答:2

我正在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。

怎么做到这一点?

swift
2个回答
0
投票

假设服务器以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)!

0
投票

让我们假设你有像这样的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。为此,你可以创建符合structDecodable和来自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)
}
© www.soinside.com 2019 - 2024. All rights reserved.