Тип any не имеет членов подстрочного индекса swift 3

#json #swift #swift3 #alamofire

#json #swift #swift3 #alamofire

Вопрос:

Мой код таков

 import UIKit
import Alamofire

class ViewController: UIViewController {


var young = "https://jsonplaceholder.typicode.com/posts"


override func viewDidLoad() {
    super.viewDidLoad()

    callAlamo(url: young)
}

func callAlamo(url: String){

    Alamofire.request(url).responseJSON { (response) in
        let responseJSON = response.data
        if responseJSON  == nil{
           print("response is empty")
        }else{
            print("Jon is (responseJSON)")

            self.parseJson(JSONData: responseJSON!)
        }

    }
}

func parseJson(JSONData: Data){

    do{
        let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers)

        for  i in 0..<(readableJSON as AnyObject).count{
            print(readableJSON[i] as String)
        }

    }catch{
        print(error)
    }
}  
}
  

введите описание изображения здесь

Мне нужен каждый элемент массива внутри этого Json.

Комментарии:

1. Есть> 20 вопросов об одном и том же сообщении об ошибке. Пожалуйста, проверьте, не было ли ответа на вашу проблему раньше.

2. Можете ли вы показать мне свой JSON, что вы получаете сервис form?

Ответ №1:

Попробуйте использовать приведенный ниже код:

 Alamofire.request(url).responseJSON { (response) in

        switch response.result {
        case .success(let value) :

            print(response.request)  // original URL request
            print(response.response) // HTTP URL response
            print(response.data)     // server data
            print(response.result)   // result of response serialization

            if let JSON = response.result.value as! [String:AnyObject]!{
                print("JSON: ",JSON)
            }
        case .failure(let encodingError):
            completionHandler(APIResponse.init(status: "failure", response: nil, result:nil))
        }
    }
  

Ответ №2:

При использовании responseJSON обработчика JSON данные уже были проанализированы внутри JSONSerialization . Вы НЕ хотите пытаться анализировать его снова, иначе вы дважды анализируете данные ответа сервера, что очень плохо сказывается на производительности. Все, что вам нужно сделать, это следующее:

 Alamofire.request(url).responseJSON { response in
    if let json = response.result.value {
        print("Parsed JSON: (json)")
        // Now you can cast `json` to a Dictionary or Array
    }
}