iphone target-c: преобразование строки в NSData для десериализации json - PullRequest
0 голосов
/ 08 июня 2011

Я получаю JSON из веб-службы в NSMutableData.

Это преобразуется в NSDictionary с помощью TouchJson.

    NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error];
NSString *strData = [dictionary objectForKey:@"cars"];

Затем я извлекаю строку из ключа из этого словаря.

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

     {
        b = "http://schemas.datacontract.org/";
        car =     (
                    {
                "car_name" = "Honda Civic";
                year = 2011;
                "dealer" = "local honda dealer";
                "bought on" = {
                    nil = 1;
                };
                "license_number" = 1234567;
                status = ReadyToGo;
            }
)};

В сущности, могут быть 'n' записи против ключа 'car'.

, когда я пытаюсь преобразовать вышеупомянутое в NSData, используя

NSData *jsonData = [strData dataUsingEncoding:NSUTF8StringEncoding];

, а также

NSData *jsonData = [strData dataUsingEncoding:[NSString defaultCStringEncoding]];

но я получаю

[__NSCFDictionary dataUsingEncoding:]: unrecognized selector sent to instance 0x532bb70

Я попробовал несколько других доступных кодировок, и xcode все еще вырвался.

Как мне определить используемую кодировку?

Это моя первая попытка десереализации json в target-c.

Что я здесь упускаю / делаю неправильно?

Спасибо

1 Ответ

1 голос
/ 08 июня 2011

Я думаю, что это вовсе не строка ....

Измените это и протестируйте ....

NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:responseData error:&error];
NSDictionary *carsDictionary = [dictionary objectForKey:@"cars"];
NSArray *arrayOfCarDictionaries = [carsDictionary objectForKey:@"car"];
...