iPhone JSON Framework не анализирует строковый объект JSON вне объекта или массива - PullRequest
0 голосов
/ 23 августа 2011

Я использую инфраструктуру JSON в Obj-C (iOS) для анализа ответов от веб-службы RESTful (C # /. NET).

Фреймворк в порядке, когда речь идет о массивах или объектах, но один из вызовов службы возвращает строку:

Необработанное значение (в памяти на сервере): 41SIdX1GRoyw1174duOrewErZpn/WatH

Значение JSON в http-ответе, закодированном WCF: "41SIdX1GRoyw1174duOrewErZpn\/WatH"

Это нормально обрабатывается аналогичными средами JSON на Android, Windows Phone 7 и, конечно, jQuery. Сервер также иногда возвращает исключение .NET WebFaultException, которое автоматически сериализует сообщение об ошибке как "Error message here".

JSON Framework возвращается с ошибкой: Token 'string' not expected before outer-most array or object

Кто-нибудь знает, как я могу декодировать строку JavaScript в Objective C?

спасибо Kris

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Я думаю, что вы говорите, что используемая вами среда JSON не может обрабатывать значение в качестве самой внешней сущности в строке JSON - она ​​ожидает объект или массив.Если это так, было бы просто проверить первый непробельный символ для '[' или '{', и, если не один из них, предположим, что это значение.

Все еще прощеВы всегда можете заключить входную строку в '[' ']' перед ее передачей в анализатор JSON, а затем "отбросить" внешний одноэлементный массив перед наблюдением за данными.Это позволяет анализатору JSON обрабатывать любой формат значения.

0 голосов
/ 23 августа 2011
-(NSString*)handleResponseAsString:(NSString*)data{
if(data==nil || [data length] == 0) return nil;
NSString* retVal = nil;
SBJsonParser* parser = [[SBJsonParser alloc] init];
NSArray* items = [parser objectWithString:[NSString stringWithFormat:@"[%@]", data]]; // enclose in [] so that the parser thinks it's an array
if([parser error] == nil)
{
    if([items count] > 0) retVal = (NSString*) [items objectAtIndex:0];
    else NSLog(@"handleResponseAsString parser error: the array had zero elements");
}else{
    NSLog(@"handleResponseAsString error: '%@' could not be decoded due to error: %@", data, [parser error]);
}
[parser release];
return retVal;

}

...