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

Posted

技术标签:

【中文标题】(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。)【英文标题】:(Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) 【发布时间】:2014-01-06 01:59:23 【问题描述】:

我发现这个错误发生在许多其他用户身上,尽管尝试了许多建议的解决方案似乎没有任何效果,所以我试图发布我的具体案例。

我正在尝试使用 django 将图像从 iphone 应用程序保存到我的 postgresql 数据库。

我的观点是这样的:

def objectimages(request, obj_id):
    object = imagesTable.objects.filter(uniqueid=obj_id)
    if request.method == 'POST':
        value = request.POST.get('image')
        f= open('image.txt', 'w+')
        f.write(value)
        f.close()
        object.update(image=value)
        return HttpResponse("Post received")
    elif request.method == 'GET':
        output = serializers.serialize('json',object, fields=('image'),indent=5, use_natural_keys=True)
        return HttpResponse(output, content_type="application/json")
该文件仅用于调试目的,它似乎写入了正确的数据 也试过 return HttpResponse(, content_type="application/json")

在我的应用程序中,发布请求是使用 AFNetworking 完成的,如下所示:

-(void) saveImageToDB

    NSString* BaseURLString = POST_IMAGE;

    NSData* data = UIImagePNGRepresentation(self.image);


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager POST:BaseURLString
       parameters:@@"image":[data base64EncodedString]
         success:^(AFHTTPRequestOperation *operation, id responseObject) 
             NSLog(@"image saved successfuly");
         
         failure:^(AFHTTPRequestOperation *operation, NSError *error) 
            NSLog(@"Error saving image: %@", error)

         ];

所以我添加了这行代码

manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

并收到此错误:Invalid value around character 1

我也尝试这样做:

AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];

[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

manager.requestSerializer = requestSerializer;

最后总是The request timed out.

请告知我的请求有什么问题

【问题讨论】:

【参考方案1】:

您将返回字符串 Post received 作为对 POST 请求的响应。该字符串不是有效的 JSON(如果您只想在 JSON 响应中返回一个字符串,则正确的 JSON 表示应该是 "Post received",带引号),而您的 JSON 反序列化器似乎正是在抱怨这一点。尝试在逻辑的两个分支中序列化您的响应。

【讨论】:

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

json数据快速返回nil

JSON 解析错误:Error Domain=NSCocoaErrorDomain Code=3840 “操作无法完成。(Cocoa 错误 3840。)

cocoa错误3840怎么解决

Error Domain = NSCocoaErrorDomain Code=3840 "操作无法完成。(Cocoa 错误 3840。)

Cocoa 错误 3840 操作无法完成

AFNetworking POST 写入服务器并返回失败错误(Cocoa 错误 3840)