如何在Swift 3中解析JSON数组

时间:2017-06-05 10:43:30

标签: ios json dictionary swift3

我从Socket获取了一些我想访问的数据,但我收到的错误是每次都无法将NSArray转换为NSDictionary。

struct SocketEventHandler {
    let event: String
    let id: UUID
    let callback: NormalCallback

    func executeCallback(with items: [Any], withAck ack: Int, withSocket socket: SocketIOClient) {
        callback(items, SocketAckEmitter(socket: socket, ackNum: ack))
    }
}


let onFriendRequestStatus: NormalCallback = {dataArray,socketAck in
        AppLog.debug(tag: TAG, msg: "Response: \(dataArray)")
        AppLog.debug(tag: TAG, msg: "Response: \(dataArray[0])")
        let response  = dataArray[0] as! Dictionary<String, Any> **// APP CRASHES ON THIS LINE**
}

回应: -

[
    {
        "status": "A",
        "acceptorId": 126,
        "id": 94,
        "createdAt": "2017-06-05T09:50:42.000Z",
        "updatedAt": "2017-06-05T09:52:26.000Z",
        "userId": 126,
        "friendId": 401
    }
]

错误 - 无法转换类型&#39; __ NSArrayM&#39;的值(0x102f0de00)到&#39; NSDictionary&#39; (0x102f0e2d8)。

2 个答案:

答案 0 :(得分:2)

可能是你有二维数组意味着dataArray的元素也是Array而不是Dictionary

if let response = dataArray[0] as? [[String: Any]], let dictionary = response.first {

    print(dictionary["status"])
}

答案 1 :(得分:2)

在句子崩溃时创建一个断点,然后使用以下命令检查dataArray究竟是什么:

po print(dataArray)