iPhone JSON Framework не анализирует строковый объект JSON вне объекта или массива

Я использую инфраструктуру 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?

спасибо Крис

2 ответа

Решение

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

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

-(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;

}

Другие вопросы по тегам