我有一个服务器响应返回
(
{
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”中检索值,我不知道如何做到这一点。
答案 0 :(得分:2)
在swift中你需要使用Swift的原生类型Array/[]
和Dictionary/[:]
而不是NSArray
和NSDictionary
,如果你指定类似上面的类型意味着更具体的编译器不会抱怨。还可以使用if let
或guard 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
}
}