NSData для NSString с ответом JSON

NSData * jsonData ответ http содержит данные JSON.

NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString: %@", jsonString);

Я получил результат:

{ "result": "\u8aaa" }

Как правильно кодировать данные в правильную строку, а не в кодировке Unicode, например "\ Ихххх "?

 Martin R27 июн. 2013 г., 11:24
@shiami: Это действительно результатjsonString? Мне просто интересно, потому что JSON будет выглядеть так.{ "result" : "\u8aaa" }
 shiami27 июн. 2013 г., 11:45
@MartinR: Да, я только что напечатал со словарем. Теперь я отредактировал правильную строку.
 borrrden27 июн. 2013 г., 10:26
Это сложно, потому что это должно быть \ u не \ U. Вы можете что-нибудь с этим сделать?
 shiami27 июн. 2013 г., 11:20
@borrrden: Да, вы правы. Это строчные буквы "у", Я отредактировал свой вопрос. Благодарю.
 Martin R27 июн. 2013 г., 10:26
Как именно вы печатали{ "result" = "\U8aaa"; } ? Это выглядит (почти) как NSLog словаря. Вы уже используете анализатор JSON (например, NSJSONSerialization)?
 iCoder27 июн. 2013 г., 10:05
Вы пробовали NSString * jsonString = [[NSString alloc] initWithData: jsonData]; ?
 Martin R27 июн. 2013 г., 11:32
@shiami: Возможно, вы сможете показать больше кода, начиная с запроса AFNetworking.
 shiami27 июн. 2013 г., 11:19
@MartinR: я использовал AFNetworking для запроса. А затем получить ответные данные. Еще не используйте анализатор JSON. Я попытался разобрать JSONKit, но он также получил тот же результат.

Ответы на вопрос(2)

в чем проблема. AFNetworking предоставил вам действительный пакет JSON. Если вы хотите, чтобы вышеуказанный код выводил символ вместо\u… Escape-последовательность, вы должны уговорить сервер, предоставляющий вам результат, изменить свой вывод. Но это не должноЭто будет необходимо. Что вы, скорее всего, хотите сделать дальше, это запустить его через десериализатор JSON ……

NSDictionary * data = [NSJSONSerialization JSONObjectWithData:jsonData …];

и вы должны получить следующий словарь:@{@"result":@"說"}, Обратите внимание, чтоresult ключ содержит строку с одним символом, который яЯ предполагаю, что вы хотите.

Кстати, в будущем я предлагаю вам скопировать и вставить вывод в свой вопрос, а не переписывать его вручную. Это'Избегу нескольких ненужных раундов исправлений и путаницы.

Решение Вопроса

Если вы конвертируете данные JSON

{ "result" : "\u8aaa" }

кNSDictionary (например, используяNSJSONSerialization) и распечатать словарь

NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@", jsonDict);

тогда вы получите вывод

{
    result = "\U8aaa";
}

Причина в том, чтоdescription методNSDictionary использует "\ Unnnn» escape-последовательности для всех не-ASCII символов. Но это только длядисплей в консоли словарьправильный!

Если вы печатаете значение ключа

NSLog(@"%@", [jsonDict objectForKey:@"result"]);

тогда вы получите ожидаемый результат

 shiami28 июн. 2013 г., 02:38
Да, вы правы в этом. Теперь я наконец понял это. Благодарю.

Ваш ответ на вопрос