JSON响应格式不正确(Swift)

时间:2017-07-03 07:10:26

标签: ios json swift

我是Swift的新手,我通过JSON格式的PHP脚本从mysql获得响应。但我的JSON格式正确:

    ["Result": <__NSArrayI 0x60000005bc60>(
<__NSArray0 0x608000000610>(

)
,

{
    name = "abc" ;
    address = "abc address"

},
{
    name = "xyz" ;
    address = "xyz address"

}
)
]

我的序列化代码是:

let url = URL(string: "my url")

    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    let body = "Id=\(Id)"
    request.httpBody = body.data(using: .utf8)
   // request.addValue("application/json", forHTTPHeaderField: "Content-type")

    URLSession.shared.dataTask(with: request) { data, response, error in

        if error == nil {

            DispatchQueue.main.async(execute: {

                do {
                    if let json = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? Dictionary<String,Any>{

                        print(json)

我哪里错了?

POSTMAN输出

{
"Result": [
    {
        name = "abc" ;
        address = "abc address"
    },
    {
        name = "xyz" ;
        address = "xyz address"
    }

]

}

3 个答案:

答案 0 :(得分:0)

尝试一次。

let json = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String:Any]

答案 1 :(得分:0)

Swift 3.0 试试这个代码..

//将参数声明为字典

let parameters = ["Id": Id"] as Dictionary<String, String>

//url
let url = URL(string: "http://test.com/api")!

//session object
let session = URLSession.shared

//URLRequest object using the url object
var request = URLRequest(url: url)
request.httpMethod = "POST"

do {
    request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)

} catch let error {
    print(error.localizedDescription)
}

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

    guard error == nil else {
        return
    }

    guard let data = data else {
        return
    }

    do {
        //json object from data
        if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
            print(json)
            // handle json...
        }

    } catch let error {
        print(error.localizedDescription)
    }
})
task.resume()

<强> Alamofire

使用Alamofire尝试此代码..

let parameters = [
    "name": "user1"]

let url = "https://myurl.com/api"
Alamofire.request(url, method:.post, parameters:parameters,encoding: JSONEncoding.default).responseJSON { response in
            switch response.result {
            case .success:
               print(response)
            case .failure(let error):
                failure(0,"Error")
            }
        }

答案 2 :(得分:0)

确保以json的身份获得回复。有时候会将字符串作为响应。如果你得到字符串然后将该json字符串转换为json对象。 检查它是否是一个有效的json对象

let valid = JSONSerialization.isValidJSONObject(jsonOBJ) // jsonOBJ is the response from server

print(valid) // if true then it is a valid json object