我有一个json
,其中包含一系列字典。我正在遍历数组以获取json
中的元素,如此...
let prodId = prodArray.first?["product_id"] as? String
这给了我第一个索引的product_id
。但我的阵列有10个元素。所以我正在使用for循环,如果我想获取数组中的所有id而不是我已经完成的第一个元素,我该怎么做...?
编辑:此外,这是我的json
回复...
{
"success": 1,
"TotalRevenue": “123.12 K",
"Productdata": [
{
"product_id": "5",
"product_name": “abc”
"product_images": [
{
"id": "938",
"image": "http://myApp.direct.com/public165_1_image_15",
"is_default": "1"
},
{
"id": "939",
"image": "http://myApp.direct.com/public165_1_image_16",
"is_default": "0"
}
]
}
答案 0 :(得分:0)
可能最好和最短的方法是使用flapMap
:
let productIds: [String] = prodArray.flapMap({ $0["product_id"] as? String })
flatMap
允许您遍历数组并尝试以获取product_id
值(因此,如果$0["product_id"] as? String
没有值flatMap
let jsonDict = // json, that converted into dictionary
if let projectData = jsonDict["Productdata"] as? [[String: Any]] {
let productIds = projectData.flatMap({ $0["product_id"] as? String })
let images = projectData.flatMap({ $0["product_images"] as? [[String: Any]] }).flatMap({ $0 })
let imageIds = images.flatMap({ $0["id"] as? String })
let imageURLs: [URL] = images.flatMap { image in
guard let imageURL = image["image"] as? String, let url = URL(string: imageURL) else { return nil }
return url
}
print(productIds) // ["5"]
print(imageIds) // ["938", "939"]
print(imageURLs) // [http://myApp.direct.com/public165_1_image_15, http://myApp.direct.com/public165_1_image_16]
}
1}}过滤掉这个。)
UPD。
System.Management.Automation
另外,您可以try it online。
答案 1 :(得分:0)
尝试以下代码。
if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any] {
if let productArray = jsonObj["Productdata"] as? [[String:Any]]{
for product in productArray{
if let prodId = prodArray.first?["product_id"] as? String {
}
}
}
}