2015-10-29 1 views
1

Как я могу прочитать json-файл japan с библиотекой NSJSONSerialization?Swift2: прочитайте локальный файл json, закодированный в UTF-8

Я пытался с (код с Swift2):

let filePath = NSBundle.mainBundle().pathForResource("myfile",ofType:"json") 
let optData = NSData(contentsOfFile:filePath!) 

do { 
    let abc = try NSJSONSerialization.JSONObjectWithData(optData! as NSData, options: .MutableContainers) as! NSDictionary 
    print("data read: \(abc)") 
} catch { 
    print("error: \(error)") 
} 

Но данные в аЬс нечитаемые. Поэтому мой вопрос: как я могу изменить кодировку объекта NSData.

Кстати, если я конвертировать NSData объект в NSString, японский JSON прекрасно закодирован:

let stringData = NSString(data: optData!, encoding: NSUTF8StringEncoding) 

спасибо

ответ

2

JSON файлы всегда в некоторой кодировке Unicode. NSJSONSerialization автоматически обрабатывает все допустимые возможности (включая UTF-8) и тот факт, что ваш stringData выглядит разумным, предполагает, что кодировка не является проблемой.

Глядя на ваш код, возможности что-то пойдет не так, являются:

  • Данные не действительны в формате JSON. Попробуйте вставить его в http://jsonlint.com, чтобы узнать, все ли в порядке.
  • Объект верхнего уровня в JSON представляет собой массив, и в этом случае приведение к NSDictionary не удастся. Вместо принудительного броска используйте if let .... as? NSDictionary, и если это не удастся, попробуйте выполнить его на NSArray.
+0

Спасибо. Мой Json действителен, а объект верхнего уровня не является массивом. Я попробую с NSArray – johann

+0

@johann Можете ли вы поставить JSON в вопрос? Кроме того, консольный журнал запускает его. – JeremyP

+0

После «зацикливания» словаря и печати содержимого в виде строки он становится читабельным! Спасибо – johann

Смежные вопросы