2017-07-17 41 views
0
{ 
"status": true, 
"status_code": 1, 
"content": [ 
    { 
     "cat_id": "3", 
     "cat_name": "Food", 
     "cat_parentid": "2" 
    }, 
    { 
     "cat_id": "4", 
     "cat_name": "Entertainment", 
     "cat_parentid": "2" 
    }, 
    { 
     "cat_id": "5", 
     "cat_name": "Cars", 
     "cat_parentid": "2" 
    }, 
    { 
     "cat_id": "12", 
     "cat_name": "Personal Care", 
     "cat_parentid": "2" 
    } 
], 
"message": "Success" 
} 

UPDATE如何從JSONObject的斯威夫特3.1

do { 
     //create json object from data 
     if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { 
      completion((json as? AnyObject)!) //here completion callback will return the jsonObject to my UIViewController. 
     } 

    } catch let error { 
     print(error.localizedDescription) 
    } 

這是我的JSONObject得到JSONArray。我對這個敏捷很新穎。如何獲取JSONArray的內容並在swift中進一步處理。任何人都可以幫助我?幫助將不勝感激。

+0

你序列化了嗎? –

+0

在iOS中,您可以使用序列化將您的JSON轉換爲字典並解析您的數據 – Dhiru

+0

是的。我連載了它。我更新了我的問題。你可以現在檢查。 – Noorul

回答

2

該代碼檢查狀態是否爲true,獲取密鑰content的數組並打印數組中的所有值。

該陣列顯然是[[String:String]]所以將對象轉換爲此特定類型。

do { 
    //create json object from data 
    if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] { 
     if let status = json["status"] as? Bool, status == true { 
      if let content = json["content"] as? [[String:String]] { 
       for category in content { 
        let id = category["cat_id"] 
        let name = category["cat_name"] 
        let parentId = category["cat_parentid"] 
        print(id , name, parentId) 
       } 
      } 
     } 
    } 

} catch let error { 
    print(error.localizedDescription) 
} 

PS:與往常一樣,從來沒有在Swift中使用.mutableContainers。這是毫無意義的

+0

你能解釋一下爲什麼不使用.mutableContainers?請分享任何鏈接 –

+0

在Swift中,集合類型默認可以使用'var'關鍵字進行修改。無論如何,將'.mutableContainers'分配給一個常量('let')是毫無用處的。請參閱https://stackoverflow.com/questions/40057854/what-do-jsonserialization-options-do-and-how-do-they-change-jsonresult/40058055#40058055 – vadian

+0

Thankyou @Vadian –

1

檢查您的JSON是否有內容數組

if let content = json["content"] as? [Dictionary<String, AnyObject>] { 
     print(content) // it will give you content array 
} 
+0

同我在下面做:P + 1 – Dhiru

0

您可以通過解析提供關鍵

if let array = result["content"] as? Array<AnyObject> { 
     print(arry) 
    } 
+0

它僅適用於nil.it檢查將打印爲不可選的陣列 –

+0

'array'絕對比'陣列更具體' – vadian

+0

是的,你可以提供一些特定類型,great + 1 @vadian – Dhiru

0
let content = dict.objectForKey("content")! as NSArray 

單個對象,那麼你可以得到JSON通過

提取您的數據
for var cat in content 
{ 
    print(cat) 
} 
0

另一種alternat一種方式,通過使用庫。如果您使用的CocoaPods然後用這個吊艙

import SwiftyJSON 

let json = JSON(<jsonObject data>) 

let contentArray: Array<JSON> = json["content"].arrayValue 

庫集成

pod 'SwiftyJSON'

-

首先,進口JSON庫斯威夫特SwiftyJSON並使用代碼

或者只需將SwiftyJSON.swift拖動到項目樹中。

0

您可以訪問像下面

if let filePath = Bundle.main.path(forResource: "sample", ofType: "json"), let data = FileManager().contents(atPath: filePath) { 
     do { 
      let dicRes = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] 
      let contentArray = dicRes?["content"] 
       print("contentArray == \(contentArray)") 
     } catch { 

     } 
    } 
0

獲取內容數組是這樣的:

let allContent = json["content"] as? [[String: Any]] 

全樣本:

do { 
     //create json object from data 
     if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { 
      if let allContent = json["content"] as? [[String: Any]] { 
       for content in allContent { 
        let catId = content["cat_id"] as? String 
        let catName = content["cat_name"] as? String 
        let catParentId = content["cat_parentid"] as? String 
        print(">> catid=" + catId!) 
        print(">> catName=" + catName!) 
        print(">> catparentID=" + catParentId!) 
       } 
      } 
     } 

    } catch let error { 
     print(error.localizedDescription) 
    }