私はASP.Net上に構築された古いタイプのWebサービスを持っています。次の関数を使用すると、私はASMX Webサービスからのデータのいくつかのタイプを取得することができました:Webサービスから返されたjsonオブジェクトの型を判別できません
func getJsonData(sql: String, spparamnames: String, spParamValues: String, completeonClosure: @escaping (AnyObject?) ->()) {
let url = URL(string:"http://www.example.com/MyWebService.asmx/GetDataTableAsJson")
var request = URLRequest(url: url!)
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") // the request is JSON
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Accept") // the expected response is also JSON
request.httpMethod = "POST"
let dictionary = ["sql" : sql, "spparamnames" : spparamnames, "spparamvalues" : spParamValues] //Parameters are here seperated with comma
request.httpBody = try! JSONSerialization.data(withJSONObject: dictionary)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error.debugDescription) // some fundamental network error
return
}
do {
if response != nil {
let myJson = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]
let isCorectJson = JSONSerialization.isValidJSONObject(myJson)
let charcount = (myJson["d"] as? String)?.characters.count
let cc = charcount ?? 0
if isCorectJson == true && cc > 0 {
completeonClosure(myJson as AnyObject?)
)
} else {
let str2 = "Connection Error"
completeonClosure(str2 as AnyObject?)
}
}
} catch let JsonError {
print(JsonError)
}
}
task.resume()
}
私はスウィフトとのクエリを実行し、NSDictionary
としてオブジェクト型をキャストし、私の出力結果は次のようになります。
getJsonData(sql: "SELECT TOP 3 User_id, LoweredUserName FROM Users", spparamnames: "", spParamValues: "") {
returnJSON in
OperationQueue.main.addOperation {
let mystr = returnJSON as? NSDictionary
print(mystr!)
}
}
結果:
{
d = "[{\"User_id\":102,\"LoweredUserName\":\"abu alay\"},{\"User_id\":90,\"LoweredUserName\":\"ali es\"},{\"User_id\":95,\"LoweredUserName\":\"alper ay\"}]";
}
私は結果が辞書のいくつかの種類だと思い、私はので、私が信奉することはできません、配列に結果を変換することができませんでした結果を効率的に使用することができます。 print(returnJSON [0] ["LoweredUserName"])のような結果を読み取るためにはどうすればよいですか?結果の先頭にある文字 "d"の意味は何ですか?事前に多くの感謝。
この辞書の "d"キーの値は、別のJSONオブジェクト(辞書の配列)の文字列表現です。可能な複製のhttp://stackoverflow.com/q/37423950/2227743 – Moritz
ありがとうエリック。とった。文字 "d"は実際には辞書の配列です。したがって、私は意味のある結果を返すために、以下をWebサービス関数に追加しなければなりませんでした:let str = myJson ["d"]?文字列 completeonClosure(AnyObjectとしての文字列) – user1960968