无法遍历字典数组中的数组

Posted

技术标签:

【中文标题】无法遍历字典数组中的数组【英文标题】:Cannot iterate through array inside array of dictionaries 【发布时间】:2020-07-13 22:11:44 【问题描述】:

我无法将响应快速解析为可行的对象。

基本上,这是我得到的响应(用于查看目的的简化数据

"[\"CO2\":0,\"Places\":[\"Name\":\"RT(Esc. Sec.)\",\"Code\":\"ST_RT\",\"Type\":0,\"CoordX\":41.176750183105469,\"CoordY\":-8.5490522384643555,\"Provider\":\"ST\",\"Lines\":null,\"Name\":\"Esc.Sec RT\",\"Code\":\"ST_RT2\",\"Type\":0,\"CoordX\":41.175251007080078,\"CoordY\":-8.54929256439209,\"Provider\":\"ST\",\"Lines\":null,\"Name\":\"SM\",\"Code\":\"ST_SM\",\"Type\":0,\"CoordX\":41.173740386962891,\"CoordY\":-8.5474367141723633,\"Provider\":\"ST\",\"Lines\":null],\"Direction\":\"R\"]"

收到回复后,我会执行以下操作:

let dict = try! JSONSerialization.jsonObject(data: responseData!, options: .allowFragments) as? [[String:Any]] ?? [[String:Any]]()

结果如下字典(我很抱歉这张图片,但我无法打印屏幕。加上这 44 个元素是Places 的总数,但我已经简化了响应我上面说的字符串)

我的问题是,我无法访问每个 Place 字典。我尝试遍历dict["Places"],但这似乎不起作用,我不明白,因为它是NSArray

我可能遗漏了一些简单的东西,但我似乎无法弄清楚。

欢迎任何帮助。

谢谢!

【问题讨论】:

放弃 JSONSerialization 并使用 Codable 进入现实世界。 我在其他情况下使用 codable,但我不能在这里使用它。它抛出一个错误,说它期望 Dictionary 但得到了一个数组。 @kyrers 你可以使用Root.self 而不是[Root].self 【参考方案1】:

你可以试试

// MARK: - Root
struct Root: Codable 
    let co2: Int
    let places: [Place]
    let direction: String

    enum CodingKeys: String, CodingKey 
        case co2 = "CO2"
        case places = "Places"
        case direction = "Direction"
    


// MARK: - Place
struct Place: Codable 
    let name, code: String
    let type: Int
    let coordX, coordY: Double
    let provider: String
    let lines: String?

    enum CodingKeys: String, CodingKey 
        case name = "Name"
        case code = "Code"
        case type = "Type"
        case coordX = "CoordX"
        case coordY = "CoordY"
        case provider = "Provider"
        case lines = "Lines"
    


let res = try JSONDecoder().decode([Root].self,from:data)
print(res.places)

【讨论】:

非常感谢!

以上是关于无法遍历字典数组中的数组的主要内容,如果未能解决你的问题,请参考以下文章

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值

使用 SwiftyJSON 遍历数组字典字典

iOS入门数组字典的遍历EnumerateObjectsUsingBlock 记录

JS中遍历普通数组和字典数组的区别