解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

Posted

技术标签:

【中文标题】解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项【英文标题】:Parse : JSON text did not start with array or object and option to allow fragments not set 【发布时间】:2016-08-20 09:02:01 【问题描述】:

我有一个使用 Parse 的系统,它有一个 Web 前端和一个 iosandroid 客户端。 在我们迁移到 HTTPS

之前,一切正常

在 Android 和 Web (javascript) 上仍然一切正常,但是当我尝试在 iOS

中上传文件时收到以下消息

JSON 文本不以数组或对象开头,并且允许未设置片段的选项。

导致它的代码是。只有当我在上传中包含图片时它才会失败 (Search.sharedInstance.imageURL != nil)

// Send to Parse             
if PFUser.currentUser() != nil 
    sentReport["user"] = Search.sharedInstance.currentUser


sentReport["reportType"] = userSelectedReportType

Search.sharedInstance.reportText = reportNotesTextView.text
sentReport["reportDescription"] = Search.sharedInstance.reportText

if (reportLatCoords != nil && reportLngCoords != nil) 
    sentReport["reportPosition"] = PFGeoPoint(latitude: reportLatCoords!, longitude: reportLngCoords!)


sentReport["search"] = Search.sharedInstance.selectedPerson

let reportImageFile = PFFile(name: "\(Search.sharedInstance.timeStamp).jpg", data: reportImage!)

if reportPhoto.image != UIImage(named: "selectPhoto") 
    if Search.sharedInstance.imageURL != nil 
        sentReport["reportPicture"] = reportImageFile
        sentReport.setObject(Search.sharedInstance.imageURL!.absoluteString, forKey: "reportImageUri")
    


sentReport["loggedAt"] = date

// Handle success & failure
sentReport.saveInBackgroundWithBlock  (success, error) -> Void in

    if success == true 
        self.dismissViewControllerAnimated(true, completion:  () -> Void in )
     else 

        if Reachability.isConnectedToNetwork() == false 
            sentReport.pinInBackgroundWithBlock  (success, error) -> Void in
                if success 
                    Search.sharedInstance.syncReportItemsWithServer()
                
            
            self.displayAlert("No internet connection available", message: "But don't worry, your report will be sent automatically when you regain an internet connection.")
        
    
    

我正在苦苦挣扎的是,我经常阅读 /parse 解决了这个问题,但是我无法控制图像上传。在 Android SDK 中也能正常工作?

我的服务器地址是:https://lowlands.lab-cloud.net/parse

更新

报告图片

 var reportImage = UIImageJPEGRepresentation(self.reportPhoto.image!,
    1.0)

if reportImage!.length < 10000000 
    reportImage = UIImageJPEGRepresentation(self.reportPhoto.image!, 0.75)
 else if (reportImage!.length >= 10000000) && (reportImage!.length <= 20000000) 
    reportImage = UIImageJPEGRepresentation(self.reportPhoto.image!, 0.50)
 else if (reportImage!.length > 20000000) 
    reportImage = UIImageJPEGRepresentation(self.reportPhoto.image!, 0.25)

【问题讨论】:

【参考方案1】:

问题出在您的 reportImage 变量上,很遗憾您没有与我们分享...这就是您将 UIImages 存储在 PFFIle 中的方式

let imageData = UIImagePNGRepresentation(image)
let imageFile = PFFile(name:"image.png", data:imageData)

var userPhoto = PFObject(className:"UserPhoto")
userPhoto["imageName"] = "My trip to Hawaii!"
userPhoto["imageFile"] = imageFile
userPhoto.saveInBackground()

【讨论】:

抱歉什么意思?这一直有效,直到我去 https 好的,所以它可能不会在图像存储中...当您在 Parse 配置中定义服务器时,您是否可以尝试添加斜杠或删除最后一个斜杠,以便它以 /parse 或 /parse 结尾/ 或尝试 /parse/1/ /1/ 不是原始解析托管服务吗?不过我会试试的 我可以登录并做一些事情,只是上传失败的图像

以上是关于解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项的主要内容,如果未能解决你的问题,请参考以下文章

NSDebugDescription = "JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。";

(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。)

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

如何在 Ios 中解析数组数据中的嵌套 Json 对象

JSON 文本在 JSONSerialization Swift 中没有以数组错误开头