2015-10-28 3 views
0

Я столкнулся с проблемой при попытке проанализировать JSON из URL-адреса.Ошибка анализа с помощью NSJSONSerialization

Ниже приводится код:

 override func viewDidLoad() { 
     super.viewDidLoad() 
     print("hello") 
     let url=NSURL(string:"http://jsonReports/sample_testkrtk252.json") 
     print("hello2") 

     if let allContactsData=NSData(contentsOfURL:url!) 

     { 
      print(allContactsData) 
     do{ 
     let allContacts: AnyObject! = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers) 
      print(allContacts) 
      if let json = allContacts as? Array<AnyObject> { 

       print(json) 
       for index in 0...json.count-1 { 

        let data12 : AnyObject? = json[index] 
        print(data12) 

        let collection = data12! as! Dictionary<String, AnyObject> 
        print(collection) 

        print(collection["data11"]) 

        let data11 : AnyObject? = collection["data11"] 
        let cont : AnyObject? = collection["cont"] 

        data1.append(data11 as! String) 
        data2.append(cont as! String) 

        print(data1) 
        print(data2) 
       } 
      } 
     } 
     catch 
     { 
      print("error") 
     } 
     } 

И после успешного запуска он дает следующий результат:

hello
hello2
<7b0d0a20 20202022 ... >
error
(lldb)

Кроме того, он дает ошибку:

NSError Domain: "NSCocoaErrorDomain" - code: 3840 0x00007f8b62c9ef50 _userInfo __NSDictionaryI * 1 key/value pair 0x00007f8b62dcb3c0

Это будет будь велика, если кто-то сможет это рассмотреть. Кроме того, есть ли лучший способ разбора JSON в Swift?

ответ

0

Ваш файл .json не является допустимой структурой. Удалите первую строку:

"registration_id":APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ, 

Теперь попробуйте запустить код:

func run()->(Void){ 
     //insert you file .jso into project. Or change the code 
     let filePath = NSBundle.mainBundle().pathForResource("sample_testkrtk252", ofType:"json") 
     let nsMutData:NSData = NSData(contentsOfFile:filePath!)! 
     do{ 
      let allContacts:[String:AnyObject] = try NSJSONSerialization.JSONObjectWithData(nsMutData, options: NSJSONReadingOptions.MutableContainers) as! [String : AnyObject] 
      print(allContacts) 

      for temp in 0...allContacts.count-1 { 

       print(temp) 
      } 

     } catch 
     { 
      print("error") 

     } 
    } 
+1

Спасибо, он работал для меня. – Poulami14

0

Почему не сразу лить AnyObject возвратил JSONObjectWithData в массив NSDictionary? Например:

let allContacts = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers) as! [NSDictionary] 

Вы уверены, что ваш JSON действительно? Свифт очень чувствителен к этому. Убедитесь, что все ключи указаны, и вы не забыли какие-либо скобки (особенно самые внешние).

Также для анализа JSON я бы порекомендовал SwiftyJSON, что значительно облегчает вам задачу.

+0

Спасибо:) Постараюсь с использованием SwiftyJSON – Poulami14

0

Спасибо за ваши ответы. Просто редактирование json сработало для меня. Да, это правда, что нужно правильно следовать формату, иначе простая двойная кавычка может нарушить ожидаемый результат. :)

"registration_id":"APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ", 

Спасибо, Poulami

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