嘿,我是新来的,我试图从VC的请求函数之外的请求中获取值,但是我做不到,我尝试了几种方法得到错误,但是我不断地得到不同的错误,现在我得到的类型Any没有下标成员,你能帮我如何从请求中获取字符串并找到数组并从中获取值吗。
我需要从VC中的Json strin中获取值,所以我尝试这样做:

let retur = Json()
retur.login(userName: userName.text!, password: password.text!) { (JSON) in
    print(JSON)

    let json = JSON
    let name = json["ubus_rpc_session"].stringValue
    print(name)

回应:
{“jsonrpc”:“2.0”,id:1,“result”:[0,{“ubus-ubus-rpc-ubus-rpc-ubus-rpc-session”:“70ea230f290f290f57f54598144559814459b5a3116e”,超时:300,“expires”:300,“acls”:“acls”:{“访问组”:{“超级用户”:[“读”、“写”],“未经身份验证的人”:[“读”]},“ubus”:{“访问组”:{“访问组”:{“访问组”:{“超级用户”:[“读”、“写”]],“未经身份验证的人”:[“读”]]},“ubus”:“读”},“ubus”:{“:{“:{“:[}
我的请求:
  private func makeWebServiceCall (urlAddress: String, requestMethod: HTTPMethod, params:[String:Any], completion: @escaping (_ JSON : Any) -> ()) {


Alamofire.request(urlAddress, method: requestMethod, parameters: params, encoding: JSONEncoding.default).responseString { response in

    switch response.result {
    case .success:
        if let jsonData = response.result.value {

            completion(jsonData)
        }


    case .failure( _):
        if let data = response.data {
            let json = String(data: data, encoding: String.Encoding.utf8)
            completion("Failure Response: \(json)")

        }

调用请求方法的函数:
public func login(userName: String, password: String, loginCompletion: @escaping (Any) -> ()) {
let loginrequest = JsonRequests.loginRequest(userName: userName, password: password)
makeWebServiceCall(urlAddress: URL, requestMethod: .post, params: loginrequest, completion: { (JSON : Any) in
    loginCompletion(JSON)
})

更新时间:
json - Alamofire和SwiftyJSon在请求函数之外获得值(value)-LMLPHP
json - Alamofire和SwiftyJSon在请求函数之外获得值(value)-LMLPHP

最佳答案

你不能用Any下标,而在你将JSON转换为[String:Any]之后,如果你试图用下标[cc]尝试.stringValue,那么Dictionary没有任何属性Dictionary你在这里混合了两个东西:cc>和Swift本地类型。我将以这种方式访问您的stringValue响应。
首先要弄清楚你是如何从你的回应中获得价值的。您不能直接从SwiftyJSON响应中获取JSON的值,因为它位于ubus_rpc_session数组的第二个对象中,所以要获得JSON的值,请这样尝试。

retur.login(userName: userName.text!, password: password.text!) { (json) in
     print(json)
     if let dic = json as? [String:Any], let result = dic["result"] as? [Any],
        let subDic = result.last as? [String:Any],
        let session = subDic["ubus_rpc_session"] as? String {

           print(session)
     }
}

如果您想使用ubus_rpc_session则可以通过这种方式获得JSON的值。
retur.login(userName: userName.text!, password: password.text!) { (json) in
     print(json)

     let jsonDic = JSON(json)
     print(jsonDic["result"][1]["ubus_rpc_session"].stringValue)
}

关于json - Alamofire和SwiftyJSon在请求函数之外获得值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41996796/

10-10 22:34