objectForKey, JSON в iOS?Не работает! - PullRequest
3 голосов
/ 29 мая 2011

Я передал некоторые данные MySQL обратно в приложение, используя приведенный ниже код, конечно, не все там, только то, что требуется. Кажется, я не могу понять значение 'cash', несмотря на то, что успешно возвратил JSON из моего PHP-файла. Я использую Touch JSON.

Пожалуйста, помогите?

NSString *urlString = [NSString stringWithFormat:@"http://REMOVED/REMOVED.php?login_key=%@&username=%@",login_key,username];

NSString *strResponse = [self stringWithUrl:[NSURL URLWithString:urlString]];
NSLog(@"%@", strResponse);


NSData *jsonData = [strResponse dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
NSLog(@"Cash: %@", [dictionary objectForKey:@"cash"]);

Возвращает журнал ниже:

2011-05-29 10:10:35.493 test1[623:207] [[[{"uid":"0","username":"admin","password":"REMOVED","email":"REMOVED","cash":"925071","exp":"117500","level":"1","clan":"YES","clanid":"1"}]]]

2011-05-29 10:10:35.495 test1[623:207] Cash: (null)

Ответы [ 3 ]

4 голосов
/ 29 мая 2011

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

[
  [
    [
      {
        "cash" : "925071",
        "clan" : "YES",
        "clanid" : "1",
        "email" : "REMOVED",
        "exp" : "117500",
        "level" : "1",
        "password" : "REMOVED",
        "uid" : "0",
        "username" : "admin"
      }
    ]
  ]
]

Попробуйте вместо этого:

NSArray *array = [[CJSONDeserializer deserializer] deserializeAsArray:jsonData
                                                                error:&error];

Также обратите внимание, что в данных JSON есть три массива, и только самый внутренний массив содержит объект (словарь). Непонятно, почему есть три вложенных массива и какие будут другие элементы в массивах, поэтому сложно дать общее решение для анализа вашей проблемы. Одна возможность:

for (NSArray *innerArray2 in array) {
    for (NSArray *innerArray3 in innerArray2) {
        for (NSDictionary *dictionary in innerArray3) {
            NSString *cash = [dictionary objectForKey:@"cash"];
            NSLog(@"Cash = %@", cash);
        }
    }
}
1 голос
/ 29 мая 2011

Убедитесь, что ваш словарь не ноль!

Простой способ сделать это:

if(!dictionary)NSLog(@"dictionary is nil!");
0 голосов
/ 29 мая 2011

две вещи, которые я бы проверил:

  1. Ваш JSON правильно создан

  2. Указанная вами кодировка правильная.

В частности, я бы попытался использовать NSASCIIStringEncoding вместо NSUTF8StringEncoding (я предлагаю это только потому, что, как я видел, это часто является причиной проблем)

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