Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS操作的JSON错误_Json_Swift - Fatal编程技术网

iOS操作的JSON错误

iOS操作的JSON错误,json,swift,Json,Swift,我有一个JSON应用程序,但我认为我的JSON代码有问题。我在不同的验证器上检查了我的JSON,他们都说我的JSON是有效的。这是我的错误: 错误域=NSCOCAERRORDOMAIN Code=3840“字符0周围的值无效。”UserInfo={NSDebugDescription=字符0周围的值无效。} 我的JSON被上传到 我的JSON处理代码是: class NewsTableViewController: UITableViewController, UIDocumentInterac

我有一个JSON应用程序,但我认为我的JSON代码有问题。我在不同的验证器上检查了我的JSON,他们都说我的JSON是有效的。这是我的错误:

错误域=NSCOCAERRORDOMAIN Code=3840“字符0周围的值无效。”UserInfo={NSDebugDescription=字符0周围的值无效。}

我的JSON被上传到

我的JSON处理代码是:

class NewsTableViewController: UITableViewController, UIDocumentInteractionControllerDelegate {

var siteURL = "http://www.annabellesykes.byethost11.com/shailenewoodleyfansappjson.json"
var items = [Item]()
var item:Item!

override func viewDidLoad() {
    super.viewDidLoad()

    getLatestNews()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! NewsTableViewCell

    // Configure the cell...
    cell.titleLabel.text = items[indexPath.row].title
    cell.dateLabel.text = items[indexPath.row].date
    cell.contentLabel.text = items[indexPath.row].content

    cell.titleLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    cell.titleLabel.numberOfLines = 999
    cell.contentLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    cell.contentLabel.numberOfLines = 3
    cell.dateLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    cell.dateLabel.numberOfLines = 999

    cell.dateLabel.sizeToFit()

    return cell
}

func getLatestNews() {

    let request = NSURLRequest(URL: NSURL(string: siteURL)!)
    let urlSession = NSURLSession.sharedSession()
    let task = urlSession.dataTaskWithRequest(request, completionHandler: {
        (data, response, error) -> Void in

        if let error = error {
            print(error)
            return
        }

        if let data = data {
            self.items = self.parseJsonData(data)

            NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
                self.tableView.reloadData()
            })
        }

    })

    task.resume()
}

func parseJsonData(data: NSData) -> [Item] {

    var items = [Item]()

    do {

        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary

        let jsonItems = jsonResult?["items"] as! [AnyObject]
        for jsonItem in jsonItems {
            let item = Item()
            item.title = jsonItem["title"] as! String
            item.content = jsonItem["content"] as! String
            item.date = jsonItem["date"] as! String
            items.append(item)
        }

    } catch {
        print(error)
    }

    return items
}
}

查看您的代码并在调试之后,您的响应中的每个键的开头都有额外的空间。这表明服务器端的json编码器存在一些问题。这可能是alamofire中的bug,它与服务器端的django一起使用。

此页面返回HTML,而不是JSON。它在浏览器中显示JSON,因为页面有一个用JSON替换HTML的JavaScript。这就是问题所在:您的代码获取的是HTML,而不是JSON。@EricD。那么我应该如何将其解释为JSON呢?您必须从提供JSON的端点获取数据,而不是从用JavaScript构建的动态HTML页面获取数据。问题不在于你的代码,而在于源代码。比如Mehul的答案@是的,问题出在服务器端。服务器创建一个HTML页面,而不是传递JSON数据。这很有意义。我刚刚切换了我的FTP服务器,我以前使用的那台似乎可以工作,但这台不行。我们在浏览器中得到的JSON响应是可以的,你可以用例如来验证它。我已经验证了它,它很好@埃里克。@SWFApp是的,这就是我对梅胡尔说的服务器端确实存在问题,但这与额外空间无关,因为我们断言JSON是有效的。问题在于,当浏览器不使用服务器时,服务器会交付HTML而不是JSON。