使用 Alamofire 解析字典中的 json 对象 [关闭]

Posted

技术标签:

【中文标题】使用 Alamofire 解析字典中的 json 对象 [关闭]【英文标题】:Parse json object in dictionary using Alamofire [closed] 【发布时间】:2017-06-20 04:44:12 【问题描述】:

您好,这是我的 json 响应,我如何将“数据”参数值存储在数组中。我正在使用 Alamofire 4 和 swift 3。我想要这个数组格式,用于在 tableview 中加载内容。

 Optional(
"current_page" = 2;
data =     (
            
        "address_location" = "place   of course";
        "category_id" = 1;
        "course_id" = 122;
        "course_title" = title;
        description = "des-s-ription about the course";
        favorited = 0;
        "from_date" = "2017-02-16";
        image = "<path>";
        lattitude = "0.876423656";
        longitude = "6.86885314";
        price = 200;
        "subcategory_id" = 10;
        thumb = "<path>";
        "to_date" = "2017-02-16";
        "user_id" = 32332;
    ,
            
        "address_location" = "place   of course";
        "category_id" = 1;
        "course_id" = 123;
        "course_title" = title;
        description = "des-s-ription about the course";
        favorited = 0;
        "from_date" = "2017-02-16";
        image = "<path>";
        lattitude = "0.876423656";
        longitude = "6.86885314";
        price = 200;
        "subcategory_id" = 10;
        thumb = "<path>";
        "to_date" = "2017-02-16";
        "user_id" = 1;
    
);
message = Success;
"next_page" = 3;
"previous_page" = 1;
"status_code" = 200;

)

API 调用操作代码

    Alamofire.request(urlString, method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON  (response:DataResponse<Any>) in

        switch(response.result) 
        case .success(_):
            if response.result.value != nil
                print(response.result.value as Any)

                //

                self.parseData(JSONData: response.data!)

                if let jsonDict = response.result.value as? [String:Any], 
                    let dataArray = jsonDict["data"] as? [[String:Any]] 
                    self.dictionary_Course = dataArray  as? [[String:Any]] 
                    let nameArray = dataArray.flatMap  $0["address_location"] as? String 
                    print(nameArray)
                                    
                print(self.dictionary_Course)


            
            else
            
            
            break

        case .failure(_):
            print(response.result.error as Any)
            break

        
    

【问题讨论】:

它是可选值。你能添加代码吗? 【参考方案1】:

试试这个:

Alamofire.request("url", method: .post, parameters: ["":""]).validate().responseJSON  response in
            switch response.result 
            case .success:
                if let result = response.result.value 
                    let responseDict = result as! [String : Any]
                    let data = responseDict["data"] as! [Any]
                    print(data)
                
            case .failure(let error):
                print(error)
            
        

【讨论】:

它可以工作,但是我如何将数据分配到数组中,当我尝试它时显​​示错误“无法将类型 '__NSArrayI' () 的值转换为 'NSDictionary' ()。” 你在哪一行出错了? 试试我更新的答案。数据是你的数组。 @KKRocks :- 我也面临同样的问题,我是 swift 语言的新手。使用您的答案,我可以将数据存储在数组中 var testArray = [Any]() , testArray = data as! [Any] 我想访问 testArray[0]["address_location"]。这该怎么做 ?我收到错误:类型“任何”没有下标成员此错误 试试这个:testArray = responseDict["data"] as! [任何]【参考方案2】:

Swift 3.0

试试下面的代码,希望对你有帮助。

if let result = response.result.value 
                    if let responseDict = result as? NSDictionary 
                        if let data = responseDict.value(forKey: "data") as?
                            [NSDictionary] 

                        
                        print(data)
                    

                

【讨论】:

我想将对象分配到数组或字典中。我如何分配 var dictionary_Course = [String: String]() 是的,但是您可以看到数据已经在 NSDictionary 的数组中。

以上是关于使用 Alamofire 解析字典中的 json 对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 解析 JSON 问题

swift 4 使用 Alamofire 解析没有键的 JSON

如何使用 Alamofire/ObjectMapper 返回嵌入在字典中的 JSON 字符串?

如何使用 AlamoFire/ObjectMapper 访问嵌入在 JSON 字典中的链接?

Alamofire中的responseJSON json解析

使用 alamofire 发布带有字典和字典数组的 JSON 对象