iOS 5 JSON Parsing Results in Cocoa Error 3840

前端 未结 4 1865
有刺的猬
有刺的猬 2020-11-29 11:44

I\'m having a hard time parsing the below JSON string on iOS 5.

{\"States\": [{\"Name\": \"Arizona\",\"Cities\": [{\"Name\": \"Phoenix\"}]},{\"Name\": \"Cali         


        
相关标签:
4条回答
  • 2020-11-29 12:36

    I had hit a similar problem. My JSON parser works intermittently when I download the JSON data from a server. Did you get your JSON data from this function?

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    

    The NSData returned from this function could be partial data. You need to appendData to an instance variable with type: NSMutableData. Then you process your JSON in another function as follows:

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    

    Reading this article for the details. It works for me

    https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

    0 讨论(0)
  • 2020-11-29 12:37

    If you arrived here because of the JSON and not because of the RTF , please check out this answer : IOS JSON Deserialization failure - STIG/NSJSONSerializer

    0 讨论(0)
  • 2020-11-29 12:41

    I was able to troubleshoot my JSON 3840 error by converting the NSData object to an NSString:

    NSError *error;
    
    NSObject *object = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    
    if (object == nil) {
        NSString *serverResponse = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
    
        NSLog(@"\n\nError:\n%@\n\nServer Response:\n%@\n\nCrash:", error.description, serverResponse);
        [NSException raise:@"Invalid Data" format:@"Unable to process web server response."];
    }
    
    0 讨论(0)
  • 2020-11-29 12:47

    One thing that strikes me as incorrect is this:

    [[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]
    

    Your data is an RTF file?? It should be a txt file (or any other sort of plain text file). RTF files usually contain text formatting data, like this:

    {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470
    {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
    {\colortbl;\red255\green255\blue255;}
    \margl1440\margr1440\vieww10800\viewh8400\viewkind0
    \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
    
    \f0\fs24 \cf0 \{"States": [\{"Name": "Arizona","Cities": [\{"Name": "Phoenix"\}]\},\{"Name": "California","Cities": [\{"Name": "Orange County"\},\{"Name": "Riverside"\},\{"Name": "San Diego"\},\{"Name": "San Francisco"\}]\},\{"Name": "Nevada","Cities": [\{"Name": "Las Vegas"\}]\}]\}}
    

    When I read that in as a data and try to parse it as JSON, I get the 3840 error you're seeing. That error's description says:

    The data couldn’t be read because it has been corrupted. (No string key for value in object around character 2.)

    So what it looks like to me is that you don't actually have JSON. You have RTF data.

    0 讨论(0)
提交回复
热议问题