Ошибка какао 3840 - NSJSONSerialization - PullRequest
1 голос
/ 14 февраля 2012

Я пытаюсь проанализировать строку JSON, возвращенную веб-службой ASP.NET.Строка возврата была упрощена до следующего:

<anyType d1p1:type="q1:string">[{"Firstname":"Johnny"}]</anyType>

Когда я запускаю следующий код в xcode, я получаю сообщение об ошибке «Ошибка домена = NSCocoaErrorDomainCode = 3840» ... »Текст JSON не запускаетсяс массивом или объектом и опцией разрешения фрагментов не установлено "

NSURL *url = [NSURL URLWithString:@"http://webserver.com/Service.asmx/GetNames"];
    NSData *data = [NSData dataWithContentsOfURL:url];
      if(data != nil)
        {
            NSError *error = nil;
            id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
                if(error == nil)
        {
            NSLog(@"%@", result);
        }else{
            NSLog(@"%@",error);
        }
    }else{
        NSLog(@"it's nil");
    }

Я не совсем уверен, что здесь делать?Кажется, ошибка в строке "id result =".

* Я думал, что это может быть формат моей строки reutrn, но все, что я читаю в сообщениях ASP.NET, говорит, что это правильно.

* Я изменил «NSJSONReadingMutableContainers» на «NSJSONReadingMutableLeves»

Ответы [ 2 ]

6 голосов
/ 22 февраля 2012

Действительно ли веб-служба возвращает части <anyType d1p1:type="q1:string"> и </anyType> этой строки в содержимом документа?Если это так, вот в чем проблема: допустимая строка JSON просто:

[{"Firstname":"Johnny"}],

Это единственный контент, который должен содержать ваш веб-ответ.Все, что в угловых скобках, на самом деле не является данными JSON, и это отбрасывает анализатор.

2 голосов
/ 06 марта 2013

Попробуйте, надеюсь, это будет работать

if ([operation isKindOfClass:[AFJSONRequestOperation class]] && [operation respondsToSelector:@selector(setJSONReadingOptions:)]) {
    ((AFJSONRequestOperation *)operation).JSONReadingOptions = NSJSONReadingAllowFragments;
}
[httpClient enqueueHTTPRequestOperation:operation];
...