2016-08-27 7 views
1

単純なJSON文字列をオブジェクト変換に使用しようとしています。コードは次のとおりです。JSONをSwiftの[String:AnyObject]にパースする方法

let u = "somehost.com/api/1/ipa/2" 
let url = NSURL(string: u)! 

let data = NSData(contentsOfURL: url)! 

let parsed: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) 

if let json = parsed as? [String: AnyObject]{ 
    // never enters this if statement. 
} 

ただし、正しくアンラップされません。これがはるかに簡単になるはずです。誰かが助けてくれますか?また、 "Xcode 7.3とswift 2.2"を使用します。

サードパーティのライブラリを使用しないでください。

+0

このAPIの応答を表示できますか? –

+0

適切なURLまたは有効なURLを表示することができます –

+0

オプションのバインディングを渡さない場合、 '[String:AnyObject]'ではない可能性があります。 JSONの始まりを示します。 – vadian

答えて

0

返されるのはオブジェクトではなく配列ではないですか?

if let json = parsed as? [AnyObject]{ 
} 
1

サンプルJSONの解析が取得し、この簡単でシンプルな理解のプロセスのように読める:

あなたはこのを試してみました。

let WebURL = "http://api.randomuser.me/" 

    let url2 = NSURL(string:WebURL) 

    let data = NSData(contentsOfURL: url2!) 

    do 
    { 

     let dictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSMutableDictionary 

     print(dictionary) 

     let arrayOfValues = dictionary .objectForKey("results") as! NSMutableArray 

     print(arrayOfValues) 


     for var i = 0; i<arrayOfValues.count; i++ { 


      let resultDictInsideArray = arrayOfValues.objectAtIndex(i) 

      let NameDict = resultDictInsideArray.objectForKey("name")! 

      let locDict = resultDictInsideArray.objectForKey("location")! 



      print(NameDict.objectForKey("title")!) 
      print(locDict.objectForKey("street")!) 



     } 


    }catch { 

    print("error") 


    } 

あなたのURLにスペースがある場合は

この

let url = NSURL(string: stringUrl.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!)! 
+0

動作しません...このエラーが発生しました 'タイプ '__NSCFString'の値を 'NSMutableDictionary''にキャストできませんでした – xazb

+0

あなたの応答をどのように表示するか – Sanju

0
 func getDataFromServer(myGetUrl : URL) { 
     let url = myGetUrl 
     //create the session object 
     let session = URLSession.shared 

     //now create the URLRequest object using the url object 
     let request = URLRequest(url: url) 

     //create dataTask using the session object to send data to the server 
     let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in 

      guard error == nil else { 
       print(error as Any) 
       return 
      } 

      guard let data = data else { 
       return 
      } 

      do { 
       //create json object from data 
       if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:AnyObject]] { 
        //print(json) 
        self.getResponsedata = json 
        //print("Here: \(self.getResponsedata)") 
        self.getDelegate.GetdataReceivedFromServer(data: self.getResponsedata , url : myGetUrl) 
       } 
      } catch let error { 
       print(error.localizedDescription) 
      } 
     }) 
     task.resume() 
    } 
} 
のようなURLのコードを記述しますが、辞書のように、配列がある辞書内の応答が表示されます以下のリンクを.......ヒット