Swift3如何获取字符串中特定键的值?

时间:2017-05-25 19:57:48

标签: arrays json swift

我有一个服务器响应返回

(
    {
    agreementId = "token.virtual.4321";
    city = AMSTERDAM;
    displayCommonName = "bunch-of-alphanumeric";
    displaySoftwareVersion = "qb2/ene/2.7.14";
    houseNumber = 22;
    postalCode = zip;
    street = "";
    }
)

如何获得agreementId的值?响应['agreementId']不起作用。我已经尝试了.first的一些示例代码,但我无法使其正常工作。

一些额外的信息,我使用alamofire对服务器进行http调用。我尝试将json解析为常量响应:

let response = JSON as! NSDictionary

但是会返回错误消息

Could not cast value of type '__NSSingleObjectArrayI' (0x1083600) to 'NSDictionary' (0x108386c). 

所以现在将json解析为一个似乎正在工作的数组。

是上面的代码
let response = JSON as! NSArry
print(response) 
吐出来。

现在我只需要从键“agreementId”中检索值,我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:2)

在swift中你需要使用Swift的原生类型Array/[]Dictionary/[:]而不是NSArrayNSDictionary,如果你指定类似上面的类型意味着更具体的编译器不会抱怨。还可以使用if letguard let进行可选换行以防止崩溃。

if let array = JSON as? [[String:Any]] {//Swift type array of dictionary
    if let dic = array.first {
        let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A
        print(agreementId)
        //access the other key-value same way
    }
}

注意:如果你的数组中有多个对象,那么你需要简单地遍历数组来访问每个数组字典。

if let array = JSON as? [[String:Any]] {//Swift type array of dictionary
    for dic in array {
        let agreementId = dic["agreementId"] as? String ?? "N/A"//Set default value instead N/A
        print(agreementId)
        //access the other key-value same way
    }
}