JSON String не будет разбираться - PullRequest
4 голосов
/ 28 февраля 2012

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

{
"Faculty_Members": [
    {
        "ID": 3377,
        "First_Name": "John",
        "Last_Name": "Doe"
    }
]
}

Мой код IOS выглядит следующим образом:

NSURL *jsonUrl = [NSURL URLWithString:@"http://website/Service1.svc/Names"];
NSError *error = nil;
NSData *jsonData = [NSData dataWithContentsOfURL:jsonUrl options:kNilOptions error:&error];
NSMutableDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error];
NSLog(@"%@",jsonResponse);

//parse out the json data
if([NSJSONSerialization isValidJSONObject:jsonResponse])
{
NSLog(@"YEP");
  }else{
NSLog(@"NOPE");
}

В журнале будут показаны правильные данные JSON, но я продолжаю получать "NOPE""в isValidJsonObject.

Веб-служба отправляет данные обратно в виде строки типа" string ".Это имеет значение?Если да, то какой тип данных я должен отправить обратно?

Любые идеи будут высоко оценены!

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Вы не используете isValidJSONObject: для проверки правильности строки JSON, вы используете ее для проверки объекта, который можно преобразовать в JSON;См. документацию :

isValidJSONObject:

Возвращает логическое значение, указывающее, может ли данный объект быть преобразован в данные JSON.

+ (BOOL)isValidJSONObject:(id)obj

Параметры:

obj
Объект для проверки.

Возвращаемое значение:

ДА, если obj можно преобразовать в данные JSON, в противном случае - НЕТ.

Вместо этого просто используйте JSONObjectWithData: для анализа данных как обычно;если произойдет сбой, он вернет NSError в error.

0 голосов
/ 22 ноября 2012

Вы должны прочитать о JSON.{} обозначает словарь.[] указывает массив

Таким образом, ваш возвращенный объект JSON является словарем, содержащим массив, содержащий словарь.Чтобы получить контент, вы можете попробовать следующее:

// YOUR CODE
NSURL *jsonUrl = [NSURL URLWithString:@"http://website/Service1.svc/Names"];
NSError *error = nil;
NSData *jsonData = [NSData dataWithContentsOfURL:jsonUrl options:kNilOptions error:&error];
NSMutableDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error];
NSLog(@"%@",jsonResponse);

// MY ADDITIONS
NSArray *facultyMembers = [jsonResponse objectForKey:@"Faculty_Members"];
NSDictionary *facultyMember = [facultyMembers objectAtIndex:0];

или даже

for(NSDictionary *dict in jsonResponse)
{
    // parse contents of dict; perhaps store in temp object and add to 
    // mutable dictionary or array
    NSNumber *ID = [dict objectForKey@"ID"];
    NSString *firstName = [dict objectForKey@"First_Name"];
    NSString *lastName = [dict objectForKey@"Last_Name"];
}
0 голосов
/ 28 февраля 2012

Также возможно, что веб-служба доставляет строки JSON в неправильной кодировке.

Согласно справочнику NSJSONSerialization !

Данные должны быть в одном из 5 поддерживаемых кодировок, перечисленных в спецификации JSON: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Данные могут иметь или не иметь спецификацию. Наиболее эффективное кодирование для анализа - UTF-8, поэтому, если у вас есть выбор в кодировании данных, передаваемых этому методу, используйте UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...