ios - 我无法在 swift 3 中从给定的 url 获取 child 的名字?

标签 ios json swift

在 api 中获取全局数组但在此我无法将子名称作为单独的数组获取只有最后加载的数组名称已进入数组如何获取数组中的所有子名称请帮助我如何获取其中的所有名称,这是我已经尝试过的代码

var detailsArray = NSArray()
var globalArray = NSMutableArray()
let url = "http://www.json-generator.com/api/json/get/cwqUAMjKGa?indent=2"
func downloadJsonWithURL() {
    let url = NSURL(string: self.url)
    URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in
        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary
        {
            self.detailsArray = (jsonObj?.value(forKey: "data") as? [[String: AnyObject]])! as NSArray
            print(self.detailsArray)
            for item in self.detailsArray
            {
                let majorDic = NSMutableDictionary()
                let detailDict = item as! NSDictionary
                print(detailDict["name"]!)
                majorDic .setValue(detailDict["name"]!, forKey: "name")
                print(detailDict["children"]!)
                if !(detailDict["children"]! is NSNull)
                {
                    let children = detailDict["children"]! as! NSArray
                    let childrenstring = NSMutableString()
                    if children.count > 0 {
                        for item in children{
                            let chilDic = item as! NSDictionary
                            print(chilDic["name"]!)
                            print(chilDic["products"]!)
                            majorDic.setValue(chilDic["name"]!, forKey: "Childernname")
                            let products = chilDic["products"]! as! NSArray
                            if products.count > 0
                            {
                                for item in products
                                {
                                    var sr = String()
                                    sr = (item as AnyObject) .value(forKey: "name") as! String
                                    childrenstring.append(sr)
                                    childrenstring.append("*")
                                }
                                majorDic.setValue(childrenstring, forKey: "Childernproducts")
                            }
                            else
                            {
                                print("products.count\(products.count)")
                                majorDic.setValue("NO DATA", forKey: "Childernproducts")
                            }
                        }
                    }
                    else
                    {
                        print("childernw.count\(children.count)")
                        majorDic.setValue("NO DATA", forKey: "Childernname")
                    }
                }
                else
                {
                    majorDic.setValue("NO DATA", forKey: "Childernname")
                    majorDic.setValue("NO DATA", forKey: "Childernproducts")
                }
                self.globalArray.add(majorDic)
            }
            print("TOTAL ASSECTS\(self.globalArray)")
            OperationQueue.main.addOperation({
                self.tableView.reloadData()
                print(self.globalArray)
                print(self.detailsArray)
            })
        }
    }).resume()
}

最佳答案

试试这个:

var detailsArray = [DataList]()
func downloadJsonWithURL() {
    let url = NSURL(string: "http://www.json-generator.com/api/json/get/cwqUAMjKGa?indent=2")
    URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in
        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary
        {
            let objArr = (jsonObj?["data"]  as? [[String: AnyObject]])! as NSArray
            for obj in objArr {
                self.detailsArray.append(DataList(json: obj as! [String : AnyObject]))
            }
            print(self.detailsArray)
        }
    }).resume()
}

模型类

class DataList: NSObject {

    var count: Int
    var category_id: Int
    var childern:[Children]
    var name:String

    init (json: [String: AnyObject]){

        if let childrenList = json["children"] as? [[String: AnyObject]] {
            var result = [Children]()
            for obj in childrenList {
                result.append(Children(json: obj))
            }
            self.childern = result
        } else {
            self.childern = [Children]()
        }

        if let count = json["count"] as? Int { self.count = count }
        else { self.count = 0 }
        if let category_id = json["category_id"] as? Int { self.category_id = category_id }
        else { self.category_id = 0 }
        if let name = json["name"] as? String { self.name = name }
        else { self.name = "" }
    }
}

class Children:NSObject{
    var count:Int
    var category_id:Int
    var products:[Products]
    var name:String

    init (json: [String: AnyObject]){

        if let productList = json["products"] as? [[String: AnyObject]] {
            var result = [Products]()
            for obj in productList {
                result.append(Products(json: obj))
            }
            self.products = result
        } else {
            self.products = [Products]()
        }

        if let count = json["count"] as? Int { self.count = count }
        else { self.count = 0 }
        if let category_id = json["category_id"] as? Int { self.category_id = category_id }
        else { self.category_id = 0 }
        if let name = json["name"] as? String { self.name = name }
        else { self.name = "" }

    }
}


class Products:NSObject{
    var product_id:Int
    var name:String

    init (json: [String: AnyObject]){

        if let product_id = json["product_id"] as? Int { self.product_id = product_id }
        else { self.product_id = 0 }

        if let name = json["name"] as? String { self.name = name }
        else { self.name = "" }

    }
}

注意:解析时请检查你的数据类型

关于ios - 我无法在 swift 3 中从给定的 url 获取 child 的名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45832196/

相关文章:

ios - 如何用一个字符替换字符串中的所有数字

php - 合并 json 字符串的唯一键的值

json - 使用 Dataweave 2.0 将 JSON 对象展开为嵌套的 JSON 对象

json - 如何在 Node.js(express) 上返回由 {} 而不是 [] 包围的 json 返回使用 knex 和 postgresql 的查询结果

swift - 您可以仅扩展使用字符串作为原始值类型的 RawRepresentables 吗?

swift - 试图了解与通用枚举相关的 "Cannot convert value of type ... to expected argument type"错误

swift - NSUTF8StringEncoding 问题与特殊字符如 "+"

iphone - UITabBar - 使用 Storyboard 的两个 View (nib) 相同的类

ios - 如何以编程方式设置设备(UI)方向?

ios - 如何在uitableview中显示和隐藏数组