如何从Swift 3.1中的jsonObject获取JSONArray

时间:2017-07-17 06:38:17

标签: ios xcode swift3

{
"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"
}

更新

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。我对swift很新。如何获取内容JSONArray并在swift中进一步处理。有人可以帮帮我吗?帮助将不胜感激。

7 个答案:

答案 0 :(得分:3)

此代码检查状态是否为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。它毫无意义

答案 1 :(得分:1)

检查你的json是否有内容数组

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

答案 2 :(得分:0)

您可以通过提供密钥

来提取数据
if let array = result["content"] as? Array<AnyObject> {
      print(arry)  
    }

答案 3 :(得分:0)

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

然后你可以通过

获取单个对象的json进行解析
for var cat in content
{
    print(cat) 
}

答案 4 :(得分:0)

另一种替代方法,通过使用库。

首先,为Swift导入JSON库 - SwiftyJSON并使用代码:

import SwiftyJSON

let json = JSON(<jsonObject data>)

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

图书馆整合
如果您正在使用cocoapods,请使用此pod:

pod 'SwiftyJSON'

或者只需将SwiftyJSON.swift拖到项目树中。

答案 5 :(得分: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 {

         }
    }

答案 6 :(得分: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)
    }