尝试在Swift中序列化JSON时为什么会出错?

时间:2016-04-09 09:38:58

标签: json swift serialization swift2 nsjsonserialization

我刚开始学习快速。所以,如果谈到迅捷,我就是一个菜鸟。为了尝试和实践它,我正在尝试为ios制作杂货申请。但是现在我被困在了最基本的东西之一,在没有使用库的情况下序列化JSON对象,所以只使用标准的swift代码。所以我的问题是你可以帮我解决我从api中获取数据的问题。

我正在使用邮递员检查我从api得到什么样的回复。当我到达api时,这是我得到的回应:

[
  {
    "id": 1,
    "name": "Regular List"
  },
  {
    "id": 2,
    "name": "List for diner"
  },
  {
    "id": 3,
    "name": "List 3"
  },
  {
    "id": 4,
    "name": "List for next week"
  },
  {
    "id": 6,
    "name": "Test name"
  }
]

在我的快速代码中,我试图通过这样做来得到这个回应:

func getBoodschapListJSON(){
        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
        let userId = prefs.integerForKey("UserId")
        let requestUrl = NSURL(string: "http://localhost:8080/api/lists/user/id/\(userId)")!
        let session = NSURLSession.sharedSession()

        let request = NSMutableURLRequest(URL: requestUrl)
        request.HTTPMethod = "GET"
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")

        session.dataTaskWithRequest(request, completionHandler: { (data, response, error) in

                do {
                    let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

                    //Here comes some code to try and process the JSON object in the table View.
                } catch {
                    print("error serializing JSON: \(error)")
                }

        }).resume()
    }

但我从来没有得到有效的回复我最终得到了错误: “错误序列化JSON:错误域= NSCocoaErrorDomain代码= 3840”字符0周围的值无效。“UserInfo = {NSDebugDescription =字符0周围的值无效。}”

我希望它与JSON没有采用正确的格式有关,以便NSJSONSerialization能够解释它。但我不确定,我已经查看了几个与我有相同问题的堆栈溢出帖子。他们中的大多数人都说使用.AllowFragments,但这并没有解决我的错误。

有人会这么善意帮助我,所以我能够在我的代码中修复此错误吗?

1 个答案:

答案 0 :(得分:0)

使用此简单代码获取jSon数组

   let data = NSData(contentsOfURL: NSURL(string: "your URL")!)


        let jsonArray: NSArray = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray

之后将此数组转换为NSDictionary并使用其值..转换为Dictionary的示例是

 let cell  = tableView.dequeueReusableCellWithIdentifier("atCell")! as UITableViewCell

        let maindata = (data[indexPath.row] as! NSDictionary)
        cell.textLabel?.text = maindata["date"] as? String

p.s我使用表格查看数据......