2016-08-31 3 views
-1

Есть ли способ я могу NSLogJSON ответ NSData в JSON формате?Как NSLog NSData Ответ JSON в формате JSON?

NSLog(@"JSON NSString: %@" ,jsonData); 

In this post они печатают NSDictionary, я могу преобразовать его в NSDictionary. и this решение возвращается (null).

Как я могу NSLog в формате JSON?

+0

Каков ваш код для конвертирования именно этого 'jsonData'? – Larme

+0

@Lamre jsonData - это NSData. Мне нужен код для его печати. Я могу преобразовать его в NSDictionary, но его нельзя сравнивать в codebeautify. –

+0

Вы подтверждаете, что NSData не ноль. –

ответ

1

• Что случилось:
jsonData (как вы дали) не является hexData представляющий JSON. (! Не жизнеспособный раствор)

• Быстрый хака, чтобы получить JSON для использования на Вашем сайте CodeBeautify:

NSDictionary *dictFromData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData]; 
NSData *realJSONData = [NSJSONSerialization dataWithJSONObject:dictFromData options:0 error:nil]; 
NSString *strFINAL = [[NSString alloc] initWithData:realJSONData encoding:NSUTF8StringEncoding]; 
NSLog(@"StrFINAL: %@", strFINAL); 

Примечание: Да, я обошел error параметры, и мы не должны. С NSJSONWritingPrettyPrinted вместо 0 в параметре options: у вас есть результат, почти такой же, как у CodeBeautify.

• Как я там:
Firt, копировать/вставить рельефности строку NSData с this answer. Таким образом, я получил jsonData, как вы. Затем я попытался просто то, что оно должно быть дано проинформированым:

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&errorJSON]; 

Который не работает давая ошибку:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x17598540 {NSDebugDescription=Invalid value around character 0.}

Но с NSDictionary *dictWithData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData];, мне удалось получить реальную NSDictionary. Но NSKeyedArchiver/NSKeyedUnarchiver делают что-то «эквивалентное» NSJSONSerialization: он сериализует, преобразует NSObject в NSData (и наоборот). Но более мощный: для любого объекта, который соответствует NSCoding. Здесь, поскольку он изначально из JSON (только NSString, NSNumber, NSArray и NSDictionary объектов, а не пользовательский), он работает без кода. Вы, например, попытались сохранить его в NSUserDefaults, и это не так.plist либо (это было также одно из моих попыток, я сохранил jsonData в памяти и использовал dictionaryWithContentsOfFile:, давая мне странный ответ, но важный в его рельефе: «" $ class "=" {value = 23} ";" что привело меня к NSKeyArchiver/NSKeyUnarchiver). Я не знаю, что вы сделали точно.

• Заключение:
Так что, где-то, вы смешали материал, найденный в Интернете. Вам нужно переделать это. Вы не можете этого допустить. В вашем коде есть проблема в другом месте. Откуда у вас jsonData? Что вы с ним сделали?

+0

У меня нет исходного кода прямо сейчас. Я могу попробовать это, когда вернусь в офис в воскресенье. Данные поступают с сервера .Net. Вы гуру. –

0

Код:

NSLog("Formatted JSON : %@" ,[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]); 
0

Есть разные ситуации. Если разбор данных JSON был прекрасен, вы просто хотите записать результат (словарь или массив). Если разбор данных JSON не удался, и вы подозреваете, что что-то не так с данными JSON, то вы конвертируете данные JSON в NSString и регистрируете это. И, наконец, если либо преобразование в NSString не удалось, либо вы посмотрите на NSString и не можете найти, что с ним не так, тогда вы сами регистрируете NSData, чтобы иметь возможность видеть байты. Это полезно, если кому-то удалось ввести контрольные символы или какую-то другую бессмыслицу в данные JSON.

Лучше всего написать метод (предупреждение! Не для робкого! Требуется писать код самостоятельно), который принимает NSData, анализирует его и распечатывает необходимую вам информацию.

+0

Проблема в том, что автор смешивает слишком много вещей. Например, с помощью 'jsonData' вы не можете получить« JSON »(как обычно в 99,9% случаев), но с' [NSKeyedUnarchiver unarchiveObjectWithData: jsonData] 'вы можете. Но он использовал «NSCoding» где-то. – Larme