Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取JSON键的字典值_Json_Swift_Swifty Json - Fatal编程技术网

获取JSON键的字典值

获取JSON键的字典值,json,swift,swifty-json,Json,Swift,Swifty Json,我试图使用Alamofire和SwiftyJSON从API中获取键[“sub_department”]中的键值[“sub_department_name”] 这就是API的响应: [ { "main_department_id": "1", "main_department_name": "mar", "main_department_image": "8.jpg", "sub_depart": [

我试图使用Alamofire和SwiftyJSON从API中获取键[“sub_department”]中的键值[“sub_department_name”]

这就是API的响应:

[
    {
        "main_department_id": "1",
        "main_department_name": "mar",
        "main_department_image": "8.jpg",
        "sub_depart": [
            {
                "sub_department_id": "4",
                "sub_department_name": "add\r\n",
                "sub_department_image": "16.png"
            },
            {
                "sub_department_id": "5",
                "sub_department_name": "rol",
                "sub_department_image": "10.jpg"
            }
        ]
    },
    {
        "main_department_id": "2",
        "main_department_name": "fam ",
        "main_department_image": "14.jpg",
        "sub_depart": [
            {
                "sub_department_id": "6",
                "sub_department_name": "fam wor",
                "sub_department_image": "23.jpg"
            }
        ]
    },
    {
        "main_department_id": "3",
        "main_department_name": "sau",
        "main_department_image": "6.jpg",
        "sub_depart": [
            {
                "sub_department_id": "7",
                "sub_department_name": "sau",
                "sub_department_image": "26.jpg"
            },
            {
                "sub_department_id": "8",
                "sub_department_name": "goo",
                "sub_department_image": "31.jpg"
            }
        ]
    },
    {
        "main_department_id": "9",
        "main_department_name": "try",
        "main_department_image": "6.jpg",
        "sub_depart": []
    }
]
这就是我使用的模型:

class CategoriesDep: NSObject {
    var depName: String
    var depImage: String
    var subName: String

    init?(dict: [String: JSON]) {
       guard let image = dict["main_department_image"]?.imagePath, !image.isEmpty else { return nil }

        self.depImage = image
        self.depName = (dict["main_department_name"]?.string)!
        self.subName = (dict["sub_department_name"]?.string)!
    }
这就是get请求:

class func categoryDep (completion: @escaping(_ error: Error?, _ data: [CategoriesDep]?) -> Void) {
    Alamofire.request(URLs.categoryDep).responseJSON { (response) in
        switch response.result {
        case.failure(let error):
            completion(error,nil)
            print(error)
        case .success(let value):
            let jsonData = JSON(value)
               //print(jsonData)
            guard let dataArray = jsonData.array else{
                completion(nil , nil)
                return
            }
            var main = [CategoriesDep]()
            for data in dataArray {
                if let data = data.dictionary , let result = CategoriesDep.init(dict: data) {
                    main.append(result)
                    print("good")
                }
            }

            completion(nil, main)
        }
    }
}

看起来sub_department是一个对象数组,因此您需要通过索引来访问它,例如['sub_department'][0]['sub_department\u name']。

您可以使用
Codable

let res = try? JSONDecodable().decode(Root.self,from:jsonData) 
let needed = res.subDepart.map{ $0.subDepartmentName }



你能用我的代码给我看一下吗?因为我试过了,但没有成功hh@rj3005
struct Root: Codable {
    let mainDepartmentID, mainDepartmentName, mainDepartmentImage: String
    let subDepart: [InnerItem]

    enum CodingKeys: String, CodingKey {
        case mainDepartmentID = "main_department_id"
        case mainDepartmentName = "main_department_name"
        case mainDepartmentImage = "main_department_image"
        case subDepart = "sub_depart"
    }
}

struct InnerItem: Codable {
    let subDepartmentID, subDepartmentName, subDepartmentImage: String

    enum CodingKeys: String, CodingKey {
        case subDepartmentID = "sub_department_id"
        case subDepartmentName = "sub_department_name"
        case subDepartmentImage = "sub_department_image"
    }
}
init?(dict: [String: JSON]) {  
  self.depImage = dict["main_department_image"]?.string ?? ""
  self.depName = dict["main_department_name"]?.string  ?? ""
  let arr = dict["sub_department_name"]?.arrayValue
  let dic = arr?[0].dictionary
  self.subName = dic?["sub_department_name"] ?? ""
}