嘿,我是新来的,我试图从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)
})
更新时间:
最佳答案
你不能用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/