【问题标题】:Unable to create valid JSON Object?无法创建有效的 JSON 对象?
【发布时间】:2015-07-06 23:06:48
【问题描述】:

我一直在尝试创建有效的 JSON 对象,但似乎做不到。我一直在看Create JSON Object from Class in Swift 作为参考,这个人似乎让他的代码工作。我有一些非常相似的东西。这是我的尝试:

func parseExportDB() -> [Dictionary<NSString, AnyObject>]{

    var exportDict: [Dictionary<NSString, AnyObject>] = []

    for tuple in export {
        var dictObj = [
            "PhoneID": 123,
            "LocLabel": tuple[crosslocation] as NSString,
            "Latitude": 123,
            "Longitude": -123,
            "Time" : tuple[time] as NSString,
            "Heading" : tuple[heading] as NSString
        ]
        exportDict.append(dictObj)
    } 
    return exportDict
}

这就是我调用函数的方式:

var exportList = database.parseExportDB()
exportData.sendJsonToServer(exportList)

这就是我尝试向我的服务器发送一个 POST 请求的 JSON 的方式:

func sendJsonToServer(ExportList: [Dictionary<NSString, AnyObject>]){

    if NSJSONSerialization.isValidJSONObject(ExportList){
        println("Is NOT valid JSON.")
    }
    var request = NSMutableURLRequest(URL: NSURL(string: "<Server link here>")!)

    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    var err: NSError?
    if let serializedData = NSJSONSerialization.dataWithJSONObject(ExportList, options: nil, error: &err){
        println("Export List: \(ExportList)")
        if NSJSONSerialization.isValidJSONObject(ExportList){
            println("Is not valid JSON again!")
        }
        else{
            println("Valid JSON!")
        }
        request.HTTPBody = serializedData
        println(request.HTTPBody)
    }
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    ...
}

问题是当我调用第一个和第二个if NSJSONSerialization.isValidJSONObject(ExportList) 语句时,似乎都说ExportList 不是有效的JSON。我不知道为什么。我查看了上面的链接并查看了很多链接,他们都说有效的 JSON 应该是 NSArray 或 NSDictionary` 的格式。此外,我查看了我的数据,似乎一切看起来都应该如此。任何帮助,将不胜感激。谢谢!

编辑:我在上面的代码上的错误..无论如何,如果有人可以帮助我完成下一部分,那就太好了..所以我正在尝试发出 HTTP POST 请求,在我执行上面的代码之后,我得到我想将数据发送到我的服务器的这部分。这是我的尝试:

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        println("Request: \(request)")

        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("Body: \(strData)")
        var err: NSError?
        var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as! NSArray
        // Did the JSONObjectWithData constructor return an error? If so, log the error to the console
        if(err != nil) {
            println(err!.localizedDescription)
            let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("Error could not parse JSON: '\(jsonStr)'")
        }

但是,当我尝试执行 var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &amp;err) as! NSArray 行时,我的数据项总是返回 nil,我不完全确定为什么...任何见解?

【问题讨论】:

  • 如果对象为 有效isValidJSONObject() 返回 true。你的 if 逻辑是错误的。

标签: ios json validation swift post


【解决方案1】:

您的代码是正确的,但有一点细节:

你会的

if NSJSONSerialization.isValidJSONObject(ExportList){
    println("Is NOT valid JSON.")
}

如果有效则显示错误???

这是错误的方式......你错过了一个NOT

if !NSJSONSerialization.isValidJSONObject(ExportList){
    println("Is NOT valid JSON.")
}

【讨论】:

  • 哦..我的错误..谢谢。我当时只是想知道,你能帮我完成我的代码的下一部分吗?我真的不知道如何发出 POST 请求。我将在上面的答案中包含代码。
猜你喜欢
  • 1970-01-01
  • 2018-02-25
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多