iOS 5 JSON-resultaten in Cocoa-fout 3840

Ik vind het moeilijk om de onderstaande JSON-reeks te analyseren op iOS 5.

{"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"}]}]}

En hier is mijn code:

- (void) parseJson {
NSError *jsonError = nil;
NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]];

if (jsonData) {
    NSDictionary *jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];

    if (jsonError) {
        NSLog(@"JSON Error: %@", [jsonError localizedDescription]);

        return;
    }

    NSLog(@"%@", jsonObjects);
}
}

Ik krijg steeds deze foutmelding:

JSON Fout: de bewerking kon niet worden voltooid. (Cacaofout 3840.)

Ik zou wat hulp op prijs stellen omdat ik het duidelijk en niet in staat ben dit te repareren.

30
Heeft het met succes jsonData ingesteld?
toegevoegd de auteur Michael Boselowitz, de bron

4 antwoord

Een ding dat me als onjuist opvalt, is dit:

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

Uw gegevens is een RTF-bestand ?? Het moet een txt -bestand zijn (of een ander type tekstbestand met platte tekst). RTF-bestanden bevatten meestal tekstopmaakgegevens, zoals deze:

{\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"\}]\}]\}}

Wanneer ik dat in als gegevens lees en probeer het te analyseren als JSON, krijg ik de 3840-fout die u ziet. De beschrijving van die fout zegt:

De gegevens kunnen niet worden gelezen omdat deze zijn beschadigd. (Geen tekenreekstoets voor waarde in object rond teken 2.)

Dus hoe het er voor mij uitziet, is dat je eigenlijk geen JSON hebt. Je hebt RTF-gegevens.

22
toegevoegd
Ja, je hebt gelijk, dat was het. Man, ik voel me nu echt stom ... Bedankt voor de hulp.
toegevoegd de auteur Gup3rSuR4c, de bron

Ik kon mijn JSON 3840-fout oplossen door het NSData -object te converteren naar een 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."];
}
10
toegevoegd
dit heeft me geholpen. heb je enig idee wat dit antwoord zou kunnen betekenen @kraftydevil? De server heeft een interne fout aangetroffen en kan uw verzoek niet voltooien. De server is overbelast of er is een fout opgetreden in de toepassing
toegevoegd de auteur SleepsOnNewspapers, de bron
@ hsavit1 Mijn kennis stopt precies in de oorspronkelijke ruimte. Uw fout is absoluut een probleem met de server/webservice, maar het is boven mijn hoofd.
toegevoegd de auteur kraftydevil, de bron

Ik had een soortgelijk probleem getroffen. Mijn JSON-parser werkt met tussenpozen wanneer ik de JSON-gegevens download van een server. Hebt u uw JSON-gegevens van deze functie ontvangen?

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

De NSData die uit deze functie wordt geretourneerd, kunnen gedeeltelijke gegevens zijn. U moet gegevens toevoegen aan een instantievariabele met het type: NSMutableData. Vervolgens verwerkt u uw JSON in een andere functie als volgt:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Dit artikel lezen voor de details. Het werkt voor mij

https://developer.apple.com/ bibliotheek/mac/# documentatie/Cocoa/Conceptueel/URLLoadingSystem/Taken/UsingNSURLConnection.html

10
toegevoegd

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

1
toegevoegd
Ik kreeg deze fout door alleen ongeldige JSON te hebben (trailing; aan het einde van JSON-objectdefinitie). Algemeen advies is mogelijk om uw JSON te verifiëren met behulp van een van de vele JSON-validatorpagina's die er zijn.
toegevoegd de auteur i_am_jorf, de bron