CJSONDeserialize error

Я работаю над приложением для анализа JSON. Я использую touchjson для разбора URL JSON, который -

https://dl.dropboxusercontent.com/u/746330/facts.json

{
"title":"About Canada",
"rows":[
    {
    "title":"Beavers",
    "description":"Beavers are second only to humans in their ability to manipulate and change their environment. They can measure up to 1.3 metres long. A group of beavers is called a colony",
    "imageHref":"http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/American_Beaver.jpg/220px-American_Beaver.jpg"
    },
    {
    "title":"Flag",
    "description":null,
    "imageHref":"http://images.findicons.com/files/icons/662/world_flag/128/flag_of_canada.png"
    },
    {
    "title":"Transportation",
    "description":"It is a well known fact that polar bears are the main mode of transportation in Canada. They consume far less gas and have the added benefit of being difficult to steal.",
    "imageHref":"http://1.bp.blogspot.com/_VZVOmYVm68Q/SMkzZzkGXKI/AAAAAAAAADQ/U89miaCkcyo/s400/the_golden_compass_still.jpg"
    },
    {
    "title":"Hockey Night in Canada",
    "description":"These Saturday night CBC broadcasts originally aired on radio in 1931. In 1952 they debuted on television and continue to unite (and divide) the nation each week.",
    "imageHref":"http://fyimusic.ca/wp-content/uploads/2008/06/hockey-night-in-canada.thumbnail.jpg"
    },
    {
    "title":"Eh",
    "description":"A chiefly Canadian interrogative utterance, usually expressing surprise or doubt or seeking confirmation.",
    "imageHref":null
    },
    {
    "title":"Housing",
    "description":"Warmer than you might think.",
    "imageHref":"http://icons.iconarchive.com/icons/iconshock/alaska/256/Igloo-icon.png"
    },
    {
    "title":"Public Shame",
    "description":" Sadly it's true.",
    "imageHref":"http://static.guim.co.uk/sys-images/Music/Pix/site_furniture/2007/04/19/avril_lavigne.jpg"
    },
    {
    "title":null,
    "description":null,
    "imageHref":null
    },
    {
    "title":"Space Program",
    "description":"Canada hopes to soon launch a man to the moon.",
    "imageHref":"http://files.turbosquid.com/Preview/Content_2009_07_14__10_25_15/trebucheta.jpgdf3f3bf4-935d-40ff-84b2-6ce718a327a9Larger.jpg"
    },
    {
    "title":"Meese",
    "description":"A moose is a common sight in Canada. Tall and majestic, they represent many of the values which Canadians imagine that they possess. They grow up to 2.7 metres long and can weigh over 700 kg. They swim at 10 km/h. Moose antlers weigh roughly 20 kg. The plural of moose is actually 'meese', despite what most dictionaries, encyclopedias, and experts will tell you.",
    "imageHref":"http://caroldeckerwildlifeartstudio.net/wp-content/uploads/2011/04/IMG_2418%20majestic%20moose%201%20copy%20(Small)-96x96.jpg"
    },
    {
    "title":"Geography",
    "description":"It's really big.",
    "imageHref":null
    },
    {
    "title":"Kittens...",
    "description":"Éare illegal. Cats are fine.",
    "imageHref":"http://www.donegalhimalayans.com/images/That%20fish%20was%20this%20big.jpg"
    },
    {
    "title":"Mounties",
    "description":"They are the law. They are also Canada's foreign espionage service. Subtle.",
    "imageHref":"http://3.bp.blogspot.com/__mokxbTmuJM/RnWuJ6cE9cI/AAAAAAAAATw/6z3m3w9JDiU/s400/019843_31.jpg"
    },
    {
    "title":"Language",
    "description":"Nous parlons tous les langues importants.",
    "imageHref":null
    }
]
}

По какой-то причине я получаю ошибку, когда я использую CJONDeserializer ---

Ошибка домена =CJSONDeserializerErrorDomain Code=-104 "Не удалось отсканировать словарь. Не удалось отсканировать значение." UserInfo=0x7feb38d99ed0 {NSLocalizedDescription= Не удалось отсканировать словарь. Не удалось отсканировать значение., Строка =0, символ =0, местоположение =0, фрагмент =!HERE>!{ "Title":"About Can}

и если я использую NSJSONSerializer, он дает мне следующую ошибку ---

"Ошибка домена =NSCocoaErrorDomain Code=3840 " Операция не может быть завершена. (Ошибка какао 3840.)" (Невозможно преобразовать данные в строку вокруг символа 2643.) UserInfo=0x7f8559c56700 {NSDebugDescription= Невозможно преобразовать данные в строку вокруг символа 2643.}"

Для кода, который я использую, это не дает мне никакой ошибки, если я использую любой другой json url.

Вот код, который я использую -

- (void)viewDidLoad {
NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    if (connection) {
        self.receivedData = [[NSMutableData alloc] init];
    }
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // The request is complete and data has been received
    // You can parse the stuff in your instance variable now

    NSError *error = nil;

    NSDictionary *receivedDataDictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:self.receivedData error:&error];

    NSArray *arrayFromJson = [receivedDataDictionary objectForKey:@"title"];

    for (NSDictionary *tempDict in arrayFromJson) {
        NSLog(@"blah %@", tempDict);
    }

}

Любая помощь будет высоко ценится. Заранее спасибо.

1 ответ

Решение

Первое из вашего JSON: "заголовок" не содержит массив, массив находится в ключевых "строках".

Второе: похоже, проблема в вашем JSON. Ваш JSON содержит "É" в третьем последнем объекте. CJSONDeserializer не в состоянии расшифровать этот тип символов. использование NSJSONSerialization, Попробуйте следующий код.

NSError *error;
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString: urlString] encoding:NSISOLatin1StringEncoding error:&error];

NSData *resData = [string dataUsingEncoding:NSUTF8StringEncoding];

id jsonObject = [NSJSONSerialization JSONObjectWithData:resData options:kNilOptions error:&error];

if (error) {
    //Error handling
} else {
    //use your json object
     NSArray *arrayFromJson = [jsonObject objectForKey:@"rows"];

    for (NSDictionary *tempDict in arrayFromJson) {
         NSLog(@"blah %@", tempDict);
    }
}
Другие вопросы по тегам