如何解析和访问HTTP响应中的特定数据

时间:2015-09-01 07:23:45

标签: ios json swift parsing

我是swift的新手,我想开发一个简单的应用程序来从网址获取数据。现在我可以从服务器获取JSON响应,但我需要分别从电子邮件地址,电话号码等所有数据中获取。那我怎么能得到它?

这是我试图从

获取的代码
    var apple = "xyz123@gmail.com"
    let myUrl = NSURL(string: "http://abcd.com/demo/xyzdemo/api/login?email_mobile=\(apple)")

    let response = NSMutableURLRequest(URL: myUrl!)
    response.HTTPMethod = "GET"

    let task = NSURLSession.sharedSession().dataTaskWithRequest(response) {
        data, response, error in

        if error != nil
        {
            println("error=\(error)")
            return
        }

        //println("response = \(response)")

        // Print out response body
        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("responseString = \(responseString!)")

        var err: NSError?
        var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary

        if let parseJSON = myJSON {

            var loginDetails = parseJSON["UserLogin"] as? String
            println("Login Details: \(loginDetails)")
        }

    }

    task.resume()
}

我输出的字符串响应是

responseString如下=

{"UserLogin":[{"result":"Success",
"userid":111,"name":"test",
"email":"xyz@gmail.com",
"mobile":"12345893576",
"location":"mnop","img_url":
"http:\/\/abcd.com\/demo\/xyzdemo\/public\/images\/no_user.png",
"date_of_birth":"06-07-2015",
"date_of_anniversary":"22-08-2015"}],
"RelationDetails":[{"id":87,"user_id":111,"name":"abc@gmail.com","dob":"2015-08-04"},{"id":88,"user_id":111,"name":" qwe","dob":"2015-08-04"},{"id":89,"user_id":111,"name":" fags","dob":"2015-08-04"}]
}

firstNameValue:nil

3 个答案:

答案 0 :(得分:0)

而不是

var loginDetails = parseJSON["UserLogin"] as? String
println("Login Details: \(loginDetails)")

尝试做:

  if let loginDetails = parseJSON["UserLogin"] as? [String:String]
  {
      let email = loginDetails["email"]
      println("email is \(email)")
  }

我在这里所做的不是强迫“UserLogin”成为String对象(它不是),我将其设置为具有String键和String对象值的字典。

然后我们可以从中获取电子邮件字符串值并将其打印出来。

您可以对“UserLogin”字典中的其余值执行相同的操作。

答案 1 :(得分:0)

您可以使用SwiftyJSON-framework。它是一个很棒的JSON框架,它使您在使用JSON时更轻松。

//Create JSONData:
var myJSON= JSONValue(data)

然后,要访问例如电子邮件,您可以访问以下数据:

let eMail = myJSON[0]["UserLogin"]["email"].string!

如您所见,您获取第一个数组元素(在您的情况下只有一个)并在UserLogin叶子中搜索元素email。然后从中获取字符串值。

答案 2 :(得分:0)

经过Michael Dautermann和Christian的大量搜索和建议,我发现这段代码很有用。只有在我们的项目中使用SwiftyJSON.swift文件后才能使用此代码,该文件可在https://github.com/SwiftyJSON/SwiftyJSON中找到

    var apple = "xyz123@gmail.com"

    let myUrl = NSURL(string: "http://abcd.com/demo/xyzdemo/api/login?email_mobile=\(apple)")

    let response = NSMutableURLRequest(URL: myUrl!)
    response.HTTPMethod = "GET"

    let task = NSURLSession.sharedSession().dataTaskWithRequest(response) {
        data, response, error in

        if error != nil
        {
            println("error=\(error)")
            return
        }

        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("responseString = \(responseString!)")


        var request = NSURLRequest(URL: myUrl!)
        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
        if data != nil {
            var hoge = JSON(data: data!)
            println(hoge["UserLogin"][0]["email"])
        }
    }

    task.resume()
}