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