У меня есть веб-сервис, который возвращает необработанную строку данных JSON (пример ниже)
{'d':{'success':true,'msg':null,'data':[{'productId':'4b7fcb0f818e4a4abaf5b3c78654b631','id':4283}]}}
... И когда я пытаюсь проанализировать этот JSON с помощью популярной библиотеки JSON для разработки на iPhone, я замечаю проблему в следующем методе
- (id)objectWithString:(NSString *)repr {
[self clearErrorTrace];
if (!repr) {
[self addErrorWithCode:EINPUT description:@"Input was 'nil'"];
return nil;
}
depth = 0;
c = [repr UTF8String];
id o;
if (![self scanValue:&o]) {
return nil;
}
// more code ...
}
Когда я нажимаю последний показанный оператор if, я показываю, что c является действительным символом (показывая значения json внутри, как и ожидалось), но я замечаю, что после определения o я возвращаю nil внутри этого последнего, если вызывает эту ошибку из библиотеки
#import "NSString+SBJSON.h"
#import "SBJsonParser.h"
@implementation NSString (NSString_SBJSON)
- (id)JSONValue
{
SBJsonParser *jsonParser = [SBJsonParser new];
id repr = [jsonParser objectWithString:self];
if (!repr)
NSLog(@"-JSONValue failed. Error trace is: %@", [jsonParser errorTrace]);
[jsonParser release];
return repr;
}
@end
Есть идеи, что может быть не так с тем, чтобы взять строку, похожую на json, и попытаться разобрать ее, как показано ниже?
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
NSArray *json = [responseString JSONValue]; //here it all fails
}
Так же, как примечание - это работает без ошибок, когда я запрашиваю допустимый веб-сервис json от крупной компании. Мое приложение aspnet mvc и обратная строка просто
return this.Content(jsonStringValue, "text/json");