2015-07-02 4 views
0

Я пытаюсь передать данные с моего веб-сервера rails в быстрое приложение с JSON. Я изо всех сил пытаюсь установить эту связь.Rails JSON to Swift 2 JSON

От контроллера Rails:

... 
    output = x.to_json 
    render :json => output 
    ... 

В Swift IOS App:

import UIKit 
class FirstViewController: UIViewController { 
override func viewDidLoad() { 
    super.viewDidLoad() 
    reachForWebsite() 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
func reachForWebsite(){ 
    let url = NSURL(string: "myURL") 
    let request = NSURLRequest(URL: url!) 
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     println(NSString(data: data!, encoding: NSUTF8StringEncoding)) 
     var error: NSError? = nil 
     if let jsonObject = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error = &error){ 
      if let dict = jsonObject as? NSDictionary { 
       println(dict) 
      } else { 
       println("not a dictionary") 
      } 
     } else { 
      println("Could not parse JSON: \(error!)") 
     } 
      println(data.dynamicType) 
     } 
    } 
    task!.resume() 
} 
} 

Я могу проверить я успешно получать данные, потому что я могу преобразовать его в строку и распечатать его на консоль приложения. Однако я не могу создать объект NSDictionary. Ошибки изменяются с каждым воином, но относятся к опциям и пытаются поймать.

JSON

{"inside":[{"name":"BOB"}, ...],"outside":[{"name":"TIM","type":"HUMAN","id":1}, ...],"info":{"time":"2015-07-02"}} 
+0

Можете ли вы опубликовать пример JSON, который вы разбираете? –

+0

Похоже, что что-то не так с вашим JSON-форматом, или, может быть, это массив вместо словаря? Кроме того, это может быть или не быть частью ответа, который вы ищете, но это прекрасная возможность развернуть дополнительные опции с помощью коммутатора: https://gist.github.com/patricklynch/8d5b792c5fa2aad95fe7 –

+0

@PatrickLynch Обновленный вопрос с Формат JSON – Marcus

ответ

0

Почему бы вам не попробовать это для разбора JSON с Swift 2

guard let task = NSURLSession.sharedSession().dataTaskWithURL(URL) {(data, response, error) in 
guard let data = data, error == nil 
else 
{ 
    // Checks for errors if the task fails like for bad connectivity. 
    print(error); 
    return; 
} 
do 
{ 
    guard let JSONDict = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [NSObject: AnyObject] 
    else 
    { 
     // The JSONDict wasn't a dictionary. Maybe its an array here? If it is change the structure of the parsing. 
     print("The JSON wasn't a dictionary. Try array by optional casting to [AnyObject] instead of the cast above to [NSObject: AnyObject]") 
     return 
    } 
    print("Parsed JSON successfully as dictionary: \(JSONDict)") 
    // Do stuff with the JSONDict which is a Swift dictionary. 
    // For example: let some = JSONDict["key"] as? ValueType will allow you to access the key of the JSONDict 
} 
catch 
{ 
    // JSON parsing error. 
    print(error) 
} 
else 
{ 
    // Error task wasn't created that's unusual unless the URL was bad. 
    // Fail here so that you can trace the stack and debug. 
    assertionFailure(); 
} 
task.resume() 

Если он не работает скажите мне, где это не удается, и что печатается на консоль.